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.
ls whateveryouwant | xargs -n 1 basename
Est-ce que ça marche pour toi?
Sinon, vous pouvez (cd /the/directory && ls)
(oui, entre parenthèses)
Pas besoin de Xargs et tout, ls est plus que suffisant.
ls -1 *.txt
affiche par rangée
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
(cd dir ; ls)
ne produira que les noms de fichiers dans dir . Utilisez ls -1
si vous en voulez un par ligne.
Une façon élégante de le résoudre consiste à utiliser deux fois "rev" et "cut":
find ./ -name "*.txt" | rev | cut -d '/' -f1 | rev
vous pouvez ajouter un script sed à votre ligne de commande:
ls /home/user/new/*.txt | sed -r 's/^.+\///'
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
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
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
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.