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 extglobund 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 -maxdepthOption ist nicht portabel. Sie können -prunestattdessen verwenden, um die findRekursion portabel zu stoppen .
find uploads/* -type d -prune -o \! -type f -name 't_*' -print
Ersetzen Sie -printdurch -exec ls -lG -- {} +, um lsdie 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 -Azu ls, oder fügen Sie Dglob - Qualifikationsspiel in zsh ( ls uploads/^t_*(.D)). Mit findkönnen Sie einen anderen Ansatz verwenden, um die Rekursion nur auf einer Ebene durchzuführen (Punktdateien werden findnicht speziell behandelt). Dies funktioniert nur dann vollständig, wenn Sie findim aktuellen Verzeichnis ausgeführt werden.
cd uploads && find . -name . -o -type d -prune -o \! -type f -name 't_*' -print