Pour afficher seulement le nom du fichier sans le chemin complet du répertoire
ls /home/user/new/*.txt
imprime tous les fichiers txt dans le répertoire. Cependant il affiche la sortie comme suit:
[me@comp]$ ls /home/user/new/*.txt
/home/user/new/file1.txt /home/user/new/file2.txt /home/user/new/file3.txt
et ainsi de suite.
je veux lancer le ls
commande pas de la /home/user/new/
répertoire donc je dois donner le nom complet du répertoire, mais je veux que la sortie soit seulement comme
[me@comp]$ ls /home/user/new/*.txt
file1.txt file2.txt file3.txt
Je ne veux pas tout le chemin. Seul le nom de fichier est nécessaire. Ces problèmes doivent être résolus en utilisant la commande ls, car sa sortie est destinée à un autre programme.
8 réponses
ls whateveryouwant | xargs -n 1 basename
cela fonctionne pour vous?
Sinon, vous pouvez (cd /the/directory && ls)
(oui, les parenthèses)
pas besoin de Xargs et tout , ls est plus que suffisant.
ls -1 *.txt
affiche le niveau de rangée
il y a plusieurs façons d'y arriver. On serait quelque chose comme:
for filepath in /path/to/dir/*
do
filename=$(basename $file)
... whatever you want to do with the file here
done
vous pouvez ajouter un script sed à votre ligne de commande:
ls /home/user/new/*.txt | sed -r 's/^.+\///'
Une façon élégante de résoudre, en utilisant deux fois "rev" et "cut":
find ./ -name "*.txt" | rev | cut -d '/' -f1 | rev
(cd dir ; ls)
ne produira que des noms de fichiers dans dir. Utilisez ls -1
si vous voulez un par ligne.
je préfère le nom de base qui est déjà répondu par fge. Une autre façon est :
ls /home/user/new/*.txt|awk -F"/" '{print $NF}'
un plus laid :
ls /home/user/new/*.txt| perl -pe 's/\//\n/g'|tail -1
en espérant être utile à quelqu'un d'aussi vieux problèmes semblent revenir à chaque fois et je trouve toujours des bons conseils ici.
Mon problème était de liste dans un fichier texte tous les noms de la "*.txt " les fichiers dans un certain répertoire sans chemin et sans extension à partir d'une séquence de Datastage 7.5.
La solution que nous avons utilisée est:
ls /home/user/new/*.txt | xargs -n 1 basename | cut -d '.' -f1 > name_list.txt