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 есть дополнительная функция, которая позволяет сопоставлять файлы не только по имени, но и по метаданным и многим другим: квалификаторы glob . Добавить (.)
в конце матча, чтобы ограничить обычные файлы. Отрицание ^
является частью синтаксиса сопоставления имен, поэтому ^t_*(.)
означает «все обычные файлы не совпадают t_*
», а не «все файлы, которые не сопоставляются обычным файлам t_*
».
setopt extended_glob # put this in your ~/.zshrc
ls uploads/^t_*(.)
Если вы оказались без продвинутых инструментов, вы можете сделать это на любом Unix с find
. Это не та вещь, которую вы обычно печатаете в командной строке, но она мощная и точная. Калеб уже показал, как это сделать с помощью GNU find . -maxdepth
Вариант не является переносимым; Вы можете использовать -prune
вместо этого, чтобы остановить find
переставая.
find uploads/* -type d -prune -o \! -type f -name 't_*' -print
Замените -print
на, -exec ls -lG -- {} +
чтобы выполнить ls
ваши любимые параметры файлов.
Все команды выше скрывают точечные файлы (то есть файлы, чье имя начинается с a .
). Если вы хотите отобразить их, перейдите -A
к ls
или добавьте D
квалификатор glob в zsh ( ls uploads/^t_*(.D)
). С помощью find
вы можете использовать другой подход, заставляя его повторять только один уровень (специально find
не обрабатывает точечные файлы). Это полностью работает, только если вы работаете find
в текущем каталоге.
cd uploads && find . -name . -o -type d -prune -o \! -type f -name 't_*' -print