GNU ls (dh der Befehl ls auf nicht eingebetteten Linux-Systemen und Cygwin, der auch auf einigen anderen Unices verfügbar ist) bietet die Option, einige Dateien anhand ihres Namens auszublenden. Es gibt jedoch keine Möglichkeit, Verzeichnisse zu ignorieren.
ls --hide='t_*' uploads
Ein anderer Ansatz ist, Ihre Shell das Matching durchführen zu lassen. Bash, ksh und zsh haben ein Negationsmuster, !(t_*)
das mit allen Dateien außer den übereinstimmenden übereinstimmt t*
. in bash muss diese funktion mit shopt -s extglob
und in zsh mit aktiviert werden setopt ksh_glob
. Zsh hat auch die äquivalente Syntax, mit ^t_*
der aktiviert werden muss setopt extended_glob
. Dies ignoriert Verzeichnisse immer noch nicht. Zsh verfügt über eine zusätzliche Funktion, mit der Dateien nicht nur nach Namen, sondern auch nach Metadaten und mehr abgeglichen werden können: Glob-Qualifikatoren . Fügen Sie (.)
am Ende eines Spiels zu regulären Dateien zu beschränken. Die Negation ^
ist Teil der Namensübereinstimmungssyntax und ^t_*(.)
bedeutet daher "Alle regulären Dateien stimmen nicht überein t_*
" und nicht "Alle Dateien, die nicht mit regulären Dateien übereinstimmen t_*
".
setopt extended_glob # put this in your ~/.zshrc
ls uploads/^t_*(.)
Wenn Sie ohne fortgeschrittene Werkzeuge auskommen, können Sie dies auf jedem Unix mit tun find
. Es ist nicht die Art von Dingen, die Sie normalerweise in der Befehlszeile eingeben würden, aber es ist leistungsstark und präzise. Caleb hat bereits gezeigt, wie man das mit GNU find macht . Die -maxdepth
Option ist nicht portabel. Sie können -prune
stattdessen verwenden, um die find
Rekursion portabel zu stoppen .
find uploads/* -type d -prune -o \! -type f -name 't_*' -print
Ersetzen Sie -print
durch -exec ls -lG -- {} +
, um ls
die gewünschten Optionen für die Dateien auszuführen .
Alle obigen Befehle verbergen Punktdateien (dh Dateien, deren Name mit a beginnt .
). Wenn Sie wollen , dass sie angezeigt werden , übergeben Sie -A
zu ls
, oder fügen Sie D
glob - Qualifikationsspiel in zsh ( ls uploads/^t_*(.D)
). Mit find
können Sie einen anderen Ansatz verwenden, um die Rekursion nur auf einer Ebene durchzuführen (Punktdateien werden find
nicht speziell behandelt). Dies funktioniert nur dann vollständig, wenn Sie find
im aktuellen Verzeichnis ausgeführt werden.
cd uploads && find . -name . -o -type d -prune -o \! -type f -name 't_*' -print