GNU ls (тобто команда ls для невбудованих систем Linux та Cygwin, також доступна для деяких інших уніцій) має можливість приховати деякі файли на основі їх імен. Хоча не можна ігнорувати каталоги.
ls --hide='t_*' uploads
Інший підхід полягає в тому, щоб змусити вашу оболонку зробити відповідність. Bash, ksh і zsh мають заперечувальний зразок, !(t_*)
який відповідає всім файлам, крім відповідних t*
; в bash цю функцію потрібно ввімкнути shopt -s extglob
, а в zsh її потрібно ввімкнути setopt ksh_glob
. Zsh також має еквівалентний синтаксис, ^t_*
який потрібно ввімкнути setopt extended_glob
. Це досі не ігнорує каталоги. Zsh має додаткову функцію, яка дозволяє зіставляти файли не тільки за назвою, але і за метаданими та іншим: глобальні класифікатори . Додайте (.)
наприкінці матчу, щоб обмежити звичайні файли. Заперечення ^
є частиною синтаксису відповідності імен, тому ^t_*(.)
означає "всі звичайні файли не збігаються t_*
", а не "всі файли, які не відповідають звичайним файлам t_*
".
setopt extended_glob # put this in your ~/.zshrc
ls uploads/^t_*(.)
Якщо ви опинитесь без вдосконалених інструментів, ви можете це зробити на будь-якому Unix find
. Це не та річ, яку ти зазвичай вводиш у командному рядку, але вона потужна та точна. Калеб уже показав, як це зробити за допомогою пошуку GNU . -maxdepth
Варіант не є стерпним; ви можете використовувати -prune
замість цього, щоб портативно зупинитись find
від повторення.
find uploads/* -type d -prune -o \! -type f -name 't_*' -print
Замінити -print
на , -exec ls -lG -- {} +
щоб виконати ls
з вашими улюбленими опціонами на файли.
Усі команди вище приховують точкові файли (тобто файли, назва яких починається з а .
). Якщо ви хочете їх відобразити, перейдіть -A
до ls
або додайте D
глобальний класифікатор у zsh ( ls uploads/^t_*(.D)
). З find
, ви можете використовувати інший підхід, щоб зробити його повторним лише одним рівнем ( find
спеціально не розглядає файли крапок). Це повністю працює лише в тому випадку, якщо ви працюєте find
в поточному каталозі.
cd uploads && find . -name . -o -type d -prune -o \! -type f -name 't_*' -print