115 votes

Pour afficher uniquement le nom du fichier sans le chemin d'accès complet

ls /home/user/new/*.txt affiche tous les fichiers txt dans ce 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 exécuter la commande ls non pas à partir du répertoire /home/user/new/ donc je dois donner le nom complet du répertoire, mais je veux que la sortie soit seulement comme suit :

[me@comp]$ ls /home/user/new/*.txt
file1.txt    file2.txt    file3.txt 

Je ne veux pas le chemin entier. Seul le nom de fichier est nécessaire. Ce problème doit être résolu en utilisant la commande ls, car sa sortie est destinée à un autre programme.

9voto

zuloo Points 779

Vous pouvez ajouter un script sed à votre ligne de commande :

ls /home/user/new/*.txt | sed -r 's/^.+\///'

8voto

John Rumpel Points 909

Une façon élégante de le résoudre est d'utiliser deux fois "rev" et "cut" :

find ./ -name "*.txt" | rev | cut -d '/' -f1 | rev

6voto

Addison Points 1484

La réponse sélectionnée n'a pas fonctionné pour moi, car j'avais des espaces, des guillemets et d'autres caractères étranges dans mes noms de fichiers. Pour citer l'entrée pour basename, vous devez utiliser:

ls /chemin/vers/mon/répertoire | xargs -n1 -I{} basename "{}"

Cela fonctionnera à coup sûr, peu importe comment les fichiers sont appelés.

3voto

Vijay Points 17992

Je préfère le nom de base qui a déjà été répondu par fge. Une autre façon est :

ls /home/user/new/*.txt| awk -F"/" '{print $NF}'

une autre façon moche est :

ls /home/user/new/*.txt| perl -pe 's/\//\n/g'|tail -1

1voto

Mauri Points 1

Juste en espérant être utile à quelqu'un car les vieux problèmes semblent revenir de temps en temps et je trouve toujours de bons conseils ici.

Mon problème était de lister dans un fichier texte tous les noms des fichiers "*.txt" dans un certain répertoire sans chemin et sans extension à partir d'une séquence 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X