web-dev-qa-db-fra.com

Pour afficher uniquement le nom de fichier sans le chemin de répertoire complet

ls /home/user/new/*.txt imprime tous les fichiers txt de ce répertoire. Cependant, il affiche le résultat comme suit:

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

etc.

Je souhaite exécuter la commande ls pas à partir du répertoire /home/user/new/. Par conséquent, je dois donner le nom complet du répertoire, mais je souhaite que le résultat soit uniquement

[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. Ce problème doit être résolu à l'aide de la commande ls, car sa sortie est destinée à un autre programme.

47
Ashish

ls whateveryouwant | xargs -n 1 basename

Est-ce que ça marche pour toi?

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

81
fge

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

ls -1 *.txt

affiche par rangée

37
VRVigneshwara

Vous pouvez y parvenir de plusieurs manières. 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
9
pgl

(cd dir ; ls)

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

5

Une façon élégante de le résoudre consiste à utiliser deux fois "rev" et "cut":

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

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

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

Je préfère le nom de base auquel fge ..____ répond déjà

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

une autre manière laide est:

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

j'espère juste ê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 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
Mauri

Nous pouvons faire cela de nombreuses façons et vous pouvez simplement essayer de suivre.

ls /home/user/new | tr '\n' '\n' | grep .txt

Une autre méthode:

cd /home/user/new && ls *.txt
0
Chaminda Bandara

La réponse sélectionnée ne fonctionnait pas 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 /path/to/my/directory | xargs -n1 -I{} basename "{}"

Ceci est garanti pour fonctionner, quel que soit le nom des fichiers.

0
Addison