wake-up-neo.com

Nur Dateinamen ohne den gesamten Verzeichnispfad anzeigen

ls /home/user/new/*.txt druckt alle TXT-Dateien in diesem Verzeichnis. Die Ausgabe wird jedoch wie folgt gedruckt:

[[email protected]]$ ls /home/user/new/*.txt
/home/user/new/file1.txt    /home/user/new/file2.txt    /home/user/new/file3.txt

und so weiter.

Ich möchte den Befehl ls nicht aus dem Verzeichnis /home/user/new/ ausführen. Ich muss also den vollständigen Verzeichnisnamen angeben, möchte jedoch nur die Ausgabe als

[[email protected]]$ ls /home/user/new/*.txt
file1.txt    file2.txt    file3.txt 

Ich will nicht den ganzen Weg. Nur Dateiname wird benötigt. Dieses Problem muss mit dem Befehl ls gelöst werden, da seine Ausgabe für ein anderes Programm bestimmt ist.

47
Ashish

ls whateveryouwant | xargs -n 1 basename

Funktioniert das für dich?

Ansonsten können Sie (cd /the/directory && ls) (ja, beabsichtigte Klammern)

81
fge

Keine Notwendigkeit für Xargs und alle, ls ist mehr als genug.

ls -1 *.txt

zeigt zeilenweise an

37
VRVigneshwara

Es gibt mehrere Möglichkeiten, dies zu erreichen. Eines wäre so etwas wie:

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)

gibt nur Dateinamen in dir aus. Verwenden Sie ls -1, wenn Sie einen pro Zeile wünschen.

5

Ein fantastischer Weg, um es zu lösen, ist durch zweimaliges "rev" und "cut":

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

sie könnten Ihrer Befehlszeile ein sed-Skript hinzufügen:

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

Ich bevorzuge den Basisnamen, der bereits von fge ..__ beantwortet wurde. Ein anderer Weg ist:

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

ein weiterer hässlicher Weg ist:

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

ich hoffe nur, jemandem behilflich zu sein, denn alte Probleme scheinen immer wieder zurückzukommen und ich finde hier immer gute Tipps.

Mein Problem war es, in einer Textdatei alle Namen der "* .txt" -Dateien in einem bestimmten Verzeichnis ohne Pfad und ohne Erweiterung aus einer Datastage 7.5-Sequenz aufzulisten.

Die von uns verwendete Lösung ist:

ls /home/user/new/*.txt | xargs -n 1 basename | cut -d '.' -f1 > name_list.txt
0
Mauri

Es gibt viele Möglichkeiten, dies zu tun, und Sie können einfach versuchen, Folgendes zu tun.

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

Eine andere Methode:

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

Die ausgewählte Antwort hat bei mir nicht funktioniert, da meine Dateinamen Leerzeichen, Anführungszeichen und andere seltsame Zeichen enthielten. Um die Eingabe für basename in Anführungszeichen zu setzen, sollten Sie Folgendes verwenden:

ls /path/to/my/directory | xargs -n1 -I{} basename "{}"

Dies funktioniert garantiert, unabhängig davon, wie die Dateien aufgerufen werden.

0
Addison