У меня есть каталог, в котором создается множество файлов (около 200) с именем temp_log.$$
и несколькими другими важными файлами, которые мне нужно проверить.
Как я могу легко перечислить все файлы и исключить их temp_log.$$
отображение?
Ожидаемый результат
$ ls -lrt <exclude-filename-part>
-- Lists files not matching the above given string
Я пролистал ls
справочную страницу, но ничего не нашел в этой ссылке. Пожалуйста, дайте мне знать, если я пропустил любую важную информацию здесь.
Благодарность
ls --hide='temp_log.$$'
должно работать. Вы можете / должны также расширить это с помощью подстановочных знаков, в зависимости от того, какая часть целого терминаtemp_log.$$
.Ответы:
С GNU
ls
(версия для не встроенных Linux и Cygwin, иногда также встречающаяся в другом месте), вы можете исключить некоторые файлы при выводе каталога.(обратите внимание на длинную форму
-I
IS--ignore='temp_log.*'
)С zsh вы можете позволить оболочке выполнять фильтрацию. Перейдите
-d
кls
так, чтобы избежать перечисления содержимого совпавших каталогов.С ksh, bash или zsh вы можете использовать синтаксис фильтрации ksh. В zsh запускай
setopt ksh_glob
первым. В bash бегиshopt -s extglob
первым.источник
-Itemp_log.*
без пробела после-I
-I
. Тем не менее,*
необходимо процитировать так или иначе.-I temp_log.*
не работает , но-I 'temp_log.*'
,-I "temp_log.*"
,-I temp_log.\*
и т.д. все в порядке.Вы можете использовать
grep
с опцией-v
.источник
Вы можете использовать
find
для этого:Это просто напечатает имена, которые вы можете добавить,
-ls
чтобы создатьls -l
вывод стиля с отметкой времени и разрешениями, или использовать-exec ls {} +
для фактического перехода к ls с любыми параметрами, которые вы хотите для столбцов, сортировки и т. Д.Я написал это, предполагая, что это были просто файлы в каталоге. Если каталог содержит другие каталоги, вы можете избежать их рекурсивного перечисления
И если вы используете ls, вы захотите передать опцию -d, чтобы она не отображалась в каталогах:
-exec ls -d {} +
источник
-maxdepth 1
также подражать нерекурсивнымls
.find
без,-maxdepth
должны смотреть здесь .Я думаю, что вы хотите использовать функцию оболочки, а не из
ls
. Я использую Bash, поэтому я проверил, что вы хотите вman bash
. Найдите «^ EXPANSION», (сначала нажав «/»). Выдержка:Недавно я начал исключать файлы на основе их первой буквы с помощью команды вроде:
Это будет соответствовать всему, что не начинается с буквы
t
. Если вы добавите больше символов в скобки, то вы исключите файлы, начинающиеся с этих букв.Ищу ссылку, а у меня хорошая! Смотрите Pattern Matching . Оттуда это будет работать для вашего случая:
Для этого необходимо, чтобы
extglob
опция оболочки была включена с помощьюshopt
встроенной функции (shopt -s extglob
), как указано Жилем .источник
Просто сделать
источник
grep
ищет шаблон в файле, а не в имени файла.Поскольку файлы, которые вы НЕ хотите печатать, имеют "temp_log". в имени файла, затем отфильтруйте с помощью grep:
ПРИМЕЧАНИЕ. В другом посте с аналогичным ответом, вероятно, было отказано в голосовании, поскольку пользователь не включал кавычки "" в строку, которую должен искать grep. Без кавычек это не работает как рекламируется.
источник
temp_log
. Это не хороший (общий) способ исключитьls
результаты.-F
@ smokes2345; точка будет соответствовать любому символу в основном регулярном выражении. См .: unix.stackexchange.com/q/119905/117549