Ich möchte ls ausführen und bestimmte Dateien in der Ausgabe ausschließen.
Wenn ich den folgenden Befehl ausführe, werden alle Dateien in einer Zeile angezeigt:
$ ls -1
file1
file2
file3
temp
Ich möchte diesen Befehl auf eine Weise ausführen, die es zeigt
$ ls -1 <insert magic here> temp
file1
file2
file3
--ignore
, können Sie diese auf Glob-Muster erweitern, z. B.ls --ignore="file?"
oderls --ignore="file*"
Für mich funktioniert es, wenn ich -I einmal benutze, aber wenn ich zweimal benutze, funktioniert es nicht. zB:
ls -I *.csv
funktioniert.Funktioniert aber
ls -I *.csv -I *.txt
nicht und gibt stattdessen txt-Dateien zurück.--ignore hat den Trick für mich getan. Das habe ich gebraucht und gearbeitet.
ls -lhrt --ignore="*.gz" --ignore="*.1"
Dadurch werden mir Dateien aus dem Protokollordner aufgelistet, in denen alte Sicherungsprotokolle ausgeschlossen sind.
quelle
ls -I '*.txt'
. Der Grund, warum es nicht ohne Anführungszeichen funktioniert, ist die Erweiterung der Shell, dh Sie fordern die Shell auf, alle CSV-Dateien aufzulisten, anstatt sie auszuschließen. Was tatsächlich passiert ist, dass es die ersten .csv- und .1-Dateien nach der Erweiterung ignoriert, aber die verbleibendenls --ignore={"*.jpg","*.png","*.svg"}
quelle
--ignore
Optionen zu erhalten. Sie hätten auch--ignore="*."{jpg,png,svg}
Ich denke, dass dies die Ausgabe erzeugt, die Sie suchen:
Anscheinend muss
shopt -s extglob
das funktionieren(ich habe es aktiviert, also denke ich, dass ich es in der fernen Vergangenheit nützlich fand und aktiviert habe).
Ich denke, Sie könnten auch grep verwenden, um die Ausgabe zu filtern:
Die Verwendung einer Pipe und von Filtern bietet viel mehr Flexibilität und Fähigkeiten, die auf andere Befehle / Situationen übertragbar sind, obwohl Sie für diesen speziellen Fall möglicherweise nicht daran interessiert sind.
quelle