GNU ls (tj. Polecenie ls w niewbudowanych systemach Linux i Cygwin, dostępne również w niektórych innych systemach unikatowych) ma opcję ukrywania niektórych plików na podstawie ich nazw. Nie można jednak zignorować katalogów.
ls --hide='t_*' uploads
Innym podejściem jest sprawienie, aby powłoka dopasowała się. Bash, ksh i zsh mają wzorzec negacji !(t_*)
pasujący do wszystkich plików oprócz pasujących t*
; w bash ta funkcja musi być włączona za pomocą shopt -s extglob
, aw zsh musi być włączona za pomocą setopt ksh_glob
. Zsh ma również równoważną składnię, ^t_*
którą należy włączyć setopt extended_glob
. To nadal nie ignoruje katalogów. Zsh ma dodatkową funkcję, która pozwala dopasowywać pliki nie tylko według nazwy, ale także według metadanych i innych: kwalifikatorów glob . Dodaj (.)
na końcu dopasowania, aby ograniczyć się do zwykłych plików. Negacja ^
jest częścią składni dopasowania nazwy, więc ^t_*(.)
oznacza „wszystkie zwykłe pliki nie pasują t_*
”, a nie „wszystkie pliki, które nie są zwykłymi plikami pasujące t_*
”.
setopt extended_glob # put this in your ~/.zshrc
ls uploads/^t_*(.)
Jeśli znajdziesz się bez zaawansowanych narzędzi, możesz to zrobić na dowolnym Uniksie find
. To nie jest coś, co zwykle wpisujesz w wierszu poleceń, ale jest mocne i precyzyjne. Caleb już pokazał, jak to zrobić za pomocą GNU find . Ta -maxdepth
opcja nie jest przenośna; -prune
zamiast tego możesz użyć , aby przenośnie przestać się find
powtarzać.
find uploads/* -type d -prune -o \! -type f -name 't_*' -print
Zamień -print
na, -exec ls -lG -- {} +
aby wykonać ls
z ulubionymi opcjami plików.
Wszystkie powyższe polecenia ukrywają pliki kropkowe (tzn. Pliki, których nazwa zaczyna się na a .
). Jeśli chcesz je wyświetlić, należy przekazać -A
do ls
lub dodać D
kwalifikator glob w zsh ( ls uploads/^t_*(.D)
). Za pomocą find
można zastosować inne podejście, aby rekursja była powtarzana tylko o jeden poziom ( find
nie traktuje specjalnie plików kropek). Działa to find
w pełni tylko wtedy, gdy uruchomisz w bieżącym katalogu.
cd uploads && find . -name . -o -type d -prune -o \! -type f -name 't_*' -print