Wenn ich tippe:
ls source/*
source/fonts:
fontello
source/images:
bg1.png eng.png fra.png
Ich erhalte die Liste der Dateien, gruppiert nach Ordnernamen. Wie kann ich einfach die Liste der Dateinamen erhalten?
ls source/*
source/fonts/fontello
source/images/bg1.png
source/images/eng.png
source/images/fra.png
Vielen Dank
find
falsch zu verwenden . Insbesondere wenn Sie laufenfor file in $(find ...)
, haben Sie eine davon getroffen.)Antworten:
Scheint ohne Änderung der Ausgabe nicht möglich zu sein, aber hier ist eine einfache Alternative:
Oder (spezifisch für GNU find), um nur Dateien in der Tiefe Ihrer Frage abzurufen:
(oder wenn Sie Verzeichnisse wie
ls
geben möchten , entfernen Sie-type f
)quelle
Sie können sich einfach an ls halten, wenn Sie einige Psychedlics (
ls -d
) hinzufügen :quelle
find
ein dickes Tier.Sie könnten an „dem armen Mann
find
“ interessiert sein :shopt -s
s ets die benannte Shell Option (en). Dieglobstar
Option ist in Bash (1) wie folgt definiert :Nachdem Sie dies getan haben
shopt -s globstar
, können Sie einen der folgenden Befehle ausführen:erzeugt die Ausgabe:
Dies schließt leider auch die Verzeichnisnamen ein. Es könnte Ihnen ein wenig helfen, das zu wissen
erzeugt die Ausgabe:
dh nur die Verzeichnisnamen. Sie könnten die Ausgabe eines des ersten Satzes von Befehlen in eine Datei, leiten Sie die Ausgabe der oben auf eine zweite Datei umleiten, und dann verwenden
comm
,diff
oder etwas ähnliches, die zweite Datei aus dem ersten abzuziehen, nur die Ebene verlassen Dateien (Nichtverzeichnisse). Aber tu das nicht.Ein anderer Ansatz (der nicht viel besser ist) ist
Die
--file-type
Option weist Siels
an,/
am Ende jedes Verzeichnisnamens (und andere Zeichen am Ende anderer (spezieller) Dateitypen) Folgendes anzuzeigen :und dann
grep -v '/$'
entfernt das die Zeilen, die mit enden/
; dh die Verzeichnisnamen. Leider wird die--file-type
Option von POSIX nicht angegeben . Wenn Ihre Versionls
dies nicht unterstützt, verwenden Sie-F
. Das ist so,--file-type
außer dass es auch ein*
am Ende der Namen ausführbarer Dateien anzeigt , was manche Leute als störend empfinden. Sie können sie beseitigen mitsed
:Wenn Sie mit allen Dateien (und nur mit den Dateien) etwas tun möchten, können Sie dies tun
Anmerkungen:
ls
mit einem Anschluss ausgegeben wird , und es ist nicht in-l
( l ong) Modus, schreibt er mehrere Namen pro Zeile (es sei denn , die Namen sehr lang sind). Sie können erzwingen, einen Namen pro Zeile zu schreiben, indem Sie-1
(eins) angeben oder die Ausgabe in eine Datei oder eine Pipe umleiten.--
in denls
Befehlen , da Sie ein Verzeichnis , dessen Inhalt sind die Auflistung Sie erstellt. Sie sollten es verwenden, wenn Sie*
in einem unbekannten Verzeichnis auflisten , um sich vor Dateinamen zu schützen, die mit beginnen-
.ls
.globstar
Shell-Option scheint nicht von POSIX definiert zu sein. (In der Tat, ich bin nicht sicher , POSIX erkennt keine Shell - Optionen.) Während es scheint zu seinbash
ism, Vorsicht - es ist nicht in allen Versionen von bash vorhanden sein könnten.Wenn
fonts
oderimages
Unterverzeichnisse hat,**
werden sie alle rekursiv bis zum Ende aufgelistet. Eine (etwas klobige und unzuverlässige) Möglichkeit, die Tiefe zu begrenzen, istDadurch werden Zeilen entfernt, die drei oder mehr
/
Zeichen enthalten.quelle