schließen Sie bestimmte Dateien in ls aus

61

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
Alice Ryhl
quelle

Antworten:

82
ls -I <filename>

-I = Den Dateinamen ignorieren, dh die angegebene Datei nicht auflisten.

Um mehr als eine Datei zu ignorieren, fügen Sie vor jedem Dateinamen ein -I hinzu .

ls -I file1 -I file2

So ignorieren Sie Dateien anhand ihrer Namenserweiterungen:

ls -I "*.jpg" -I "*.svg"
Sudheer
quelle
4
Wenn Sie die Langform-Option verwenden --ignore, können Sie diese auf Glob-Muster erweitern, z. B. ls --ignore="file?"oderls --ignore="file*"
steeldriver
3
Sie können Glob-Muster auch mit der Kurzform verwenden, indem Sie die Muster in
Anführungszeichen setzen
18

Für mich funktioniert es, wenn ich -I einmal benutze, aber wenn ich zweimal benutze, funktioniert es nicht. zB: ls -I *.csvfunktioniert.

Funktioniert aber ls -I *.csv -I *.txtnicht 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.

Damodar Bashyal
quelle
3
Das Zitieren von * .csv in der ersten Form funktioniert, z 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 verbleibenden
auflistet
Das doppelte Zitieren hat auch bei mir funktioniert. Thanks @verboze
user38537
das ist einfacher. Vielen Dank.
Philippe Delteil
6

ls --ignore={"*.jpg","*.png","*.svg"}

Kartikey Tanna
quelle
4
Dies verwendet einfach die Klammererweiterung von bash, um drei --ignoreOptionen zu erhalten. Sie hätten auch--ignore="*."{jpg,png,svg}
muru
1

Ich denke, dass dies die Ausgabe erzeugt, die Sie suchen:

ls -1 !(temp)

Anscheinend muss shopt -s extglobdas 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:

ls -1 | grep -v '^temp$'

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.

Max Waterman
quelle