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.

41
demandé sur Bill the Lizard 2011-12-15 14:41:11

8 réponses

ls whateveryouwant | xargs -n 1 basename

cela fonctionne pour vous?

Sinon, vous pouvez (cd /the/directory && ls) (oui, les parenthèses)

69
répondu fge 2016-02-22 06:12:28

pas besoin de Xargs et tout , ls est plus que suffisant.

ls -1 *.txt

affiche le niveau de rangée

35
répondu VRVigneshwara 2015-12-10 13:57:24

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
8
répondu pgl 2011-12-15 10:47:37

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

ls /home/user/new/*.txt | sed -r 's/^.+\///'
4
répondu zuloo 2011-12-15 10:51:20

Une façon élégante de résoudre, en utilisant deux fois "rev" et "cut":

find ./ -name "*.txt" | rev | cut -d '/' -f1 | rev
4
répondu John Rumpel 2014-11-12 13:08:32

(cd dir ; ls)

ne produira que des noms de fichiers dans dir. Utilisez ls -1 si vous voulez un par ligne.

3
répondu Gerrit Jan Baarda 2017-06-08 12:32:18

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
1
répondu Vijay 2011-12-15 11:04:45

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
0
répondu Mauri 2017-03-29 16:32:53