У меня есть каталог под названием uploads
. Он содержит несколько файлов, а также несколько подкаталогов, которые в свою очередь содержат файлы.
Есть ли способ, которым я могу (за один шаг) сделать следующее:
Перечислять ТОЛЬКО файлы в корневом каталоге загрузок - я не хочу видеть имена подпапок или их содержимое;
а также
НЕ перечисляйте файлы, которые начинаются с
t_
Я знаю о -d
флаге, но он не дает мне того, чего я хочу.
-exec ls -lG -- {} +
в своем ответе, чтобы получить вывод, используя дополнительные опции для ls. Вы также можете добавить просто-ls
к этой находке, чтобы получить быстрое и грязное приближение подробного представления ls.GNU ls (т. Е. Команда ls в не встроенных системах Linux и Cygwin, также доступная в некоторых других приложениях) имеет возможность скрыть некоторые файлы, основываясь на их именах. Там нет способа игнорировать каталоги, хотя.
Другой подход - сделать так, чтобы ваша оболочка соответствовала. Bash, ksh и zsh имеют шаблон отрицания
!(t_*)
для соответствия всем файлам, кроме соответствующихt*
; в bash эту функцию нужно включить с помощьюshopt -s extglob
, а в zsh - сsetopt ksh_glob
. Zsh также имеет эквивалентный синтаксис,^t_*
который необходимо включитьsetopt extended_glob
. Это все еще не игнорирует каталоги. В Zsh есть дополнительная функция, которая позволяет сопоставлять файлы не только по имени, но и по метаданным и многим другим: квалификаторы glob . Добавить(.)
в конце матча, чтобы ограничить обычные файлы. Отрицание^
является частью синтаксиса сопоставления имен, поэтому^t_*(.)
означает «все обычные файлы не совпадаютt_*
», а не «все файлы, которые не сопоставляются обычным файламt_*
».Если вы оказались без продвинутых инструментов, вы можете сделать это на любом Unix с
find
. Это не та вещь, которую вы обычно печатаете в командной строке, но она мощная и точная. Калеб уже показал, как это сделать с помощью GNU find .-maxdepth
Вариант не является переносимым; Вы можете использовать-prune
вместо этого, чтобы остановитьfind
переставая.Замените
-print
на,-exec ls -lG -- {} +
чтобы выполнитьls
ваши любимые параметры файлов.Все команды выше скрывают точечные файлы (то есть файлы, чье имя начинается с a
.
). Если вы хотите отобразить их, перейдите-A
кls
или добавьтеD
квалификатор glob в zsh (ls uploads/^t_*(.D)
). С помощьюfind
вы можете использовать другой подход, заставляя его повторять только один уровень (специальноfind
не обрабатывает точечные файлы). Это полностью работает, только если вы работаетеfind
в текущем каталоге.источник
-maxdepth
должно сработать, но проблема «переносимости», на которую ссылается Жиль, заключается в том, что BSDfind
(также найденный в OSX, я думаю) - это немного другое животное, так что вам может понадобиться и его ответ. @ Жиль: +1 за трюк Zsh!prune
ум приходят некоторые не очень сочные комментарии о s, но я позволю этому уйти, просто сказав, что когда я слоняюсь по своим системам, сколько раз мысль « сработает ли эта команда, если я буду на AIX, Solaris или MINIX3 "примерно ... в режиме ожидания ... Мне трудно получить показания счетчика ... дисплей завис0.00
.ls
нет--use-telepathy
выбора? Это самый быстрый способ отобразить только те файлы, которые вы хотите. Это может быть не портативным, хотя.источник
$9
в этом утверждении?ls
вывод .print
$ NF` будет лучше, ИМО. $ NF означает количество полей, которое будет равно 9 и является обычным использованием в AWK как хорошая возможность рассказать другим о $ NF.источник
find
?Позвольте мне дать ему шанс, используя
ls
и трубы:скажем, последний столбец 9-й.
источник
Если проблема переносимости find -maxdepth является проблемой, вы можете использовать:
Я не эксперт, но я думаю, что это должно работать. Я полагаю, это выглядит немного загадочно, но если вы говорите на awk, это действительно не так. $ NF можно использовать вместо $ 9. Вы также можете сделать:
который делает то же самое (но, возможно, менее эффективно, чем первый ???).
На самом деле, подумав о других постах, выглядит
это еще короче и яснее.
Кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь. :-)
источник
ls
как правило, не очень хорошая идея . Ваши трюки на awk потерпят неудачу с именами файлов, например, с пробелами в них.Я нашел эти короткие пути:
или
источник
Попробуйте этот псевдоним и используйте его:
источник
ls -hLlF
показывает подкаталоги и показывает файлы, начинающиеся сt_
. Так как же это ответить на вопрос?Очень просто:
ls -l --hide 't_*' <absolute path to desired directory> | grep -v ^d
источник