Я хотел бы запустить ls и исключить определенные файлы в выводе.
Когда я запускаю следующую команду, я получаю все файлы с каждым в одной строке:
$ ls -1
file1
file2
file3
temp
Я хотел бы выполнить эту команду таким образом, чтобы она показывала
$ ls -1 <insert magic here> temp
file1
file2
file3
--ignore
вы можете расширить ее до шаблоновls --ignore="file?"
ls --ignore="file*"
Для меня, если я использую -I один раз, это работает, но если я использую дважды, это не так. например:
ls -I *.csv
работает.Но
ls -I *.csv -I *.txt
не работает и возвращает текстовые файлы.- игнор сделал свое дело для меня. Это то, что мне было нужно и работало.
ls -lhrt --ignore="*.gz" --ignore="*.1"
Это перечислит мне файлы из папки журнала, где исключаются старые журналы резервного копирования.
источник
ls -I '*.txt'
. Причина, по которой он не работает без кавычек, заключается в расширении оболочки, т. Е. Вы говорите оболочке перечислять все CSV-файлы, а не исключать их. На самом деле происходит то, что он игнорирует первые файлы .csv и .1 после расширения, но перечисляет остаткиls --ignore={"*.jpg","*.png","*.svg"}
источник
--ignore
варианта. Вы могли бы также использовать--ignore="*."{jpg,png,svg}
Я думаю, что это дает результат, который вы ищете:
Видимо , вам нужно
shopt -s extglob
, чтобы это работало(у меня оно включено, поэтому, думаю, какое-то время в далеком прошлом я нашел его полезным и включил его).
Я думаю, вы также можете использовать grep для фильтрации вывода:
Использование конвейера и фильтров обеспечивает гораздо большую гибкость и навыки, которые можно перенести в другие команды / ситуации, хотя это может вас не заинтересовать в данном конкретном случае.
источник