исключить определенные файлы в ls

61

Я хотел бы запустить ls и исключить определенные файлы в выводе.

Когда я запускаю следующую команду, я получаю все файлы с каждым в одной строке:

$ ls -1
file1
file2
file3
temp

Я хотел бы выполнить эту команду таким образом, чтобы она показывала

$ ls -1 <insert magic here> temp
file1
file2
file3
Алиса Рил
источник

Ответы:

82
ls -I <filename>

-I = игнорировать имя файла, т. Е. Не указывать указанный файл.

Чтобы игнорировать более одного файла, добавьте -I перед каждым именем файла.

ls -I file1 -I file2

Например, чтобы игнорировать файлы по расширениям их имен, выполните следующие действия.

ls -I "*.jpg" -I "*.svg"
Sudheer
источник
4
Если вы используете опцию длинной формы, --ignoreвы можете расширить ее до шаблонов ls --ignore="file?"ls --ignore="file*"
глобуса,
3
вы также можете использовать шаблоны с короткой формой, цитируя шаблоны
verboze
18

Для меня, если я использую -I один раз, это работает, но если я использую дважды, это не так. например: ls -I *.csvработает.

Но ls -I *.csv -I *.txtне работает и возвращает текстовые файлы.

- игнор сделал свое дело для меня. Это то, что мне было нужно и работало.

ls -lhrt --ignore="*.gz" --ignore="*.1"

Это перечислит мне файлы из папки журнала, где исключаются старые журналы резервного копирования.

Дамодар Башял
источник
3
процитировать * .csv в первой форме работы, например., ls -I '*.txt'. Причина, по которой он не работает без кавычек, заключается в расширении оболочки, т. Е. Вы говорите оболочке перечислять все CSV-файлы, а не исключать их. На самом деле происходит то, что он игнорирует первые файлы .csv и .1 после расширения, но перечисляет остатки
verboze
Двойное цитирование работало и для меня. Спасибо @verboze
user38537
это проще Благодарю.
Филипп Delteil
6

ls --ignore={"*.jpg","*.png","*.svg"}

Картикей Танна
источник
4
Это просто использование расширения скобки bash, чтобы получить три --ignoreварианта. Вы могли бы также использовать--ignore="*."{jpg,png,svg}
Muru
1

Я думаю, что это дает результат, который вы ищете:

ls -1 !(temp)

Видимо , вам нужно shopt -s extglob, чтобы это работало
(у меня оно включено, поэтому, думаю, какое-то время в далеком прошлом я нашел его полезным и включил его).

Я думаю, вы также можете использовать grep для фильтрации вывода:

ls -1 | grep -v '^temp$'

Использование конвейера и фильтров обеспечивает гораздо большую гибкость и навыки, которые можно перенести в другие команды / ситуации, хотя это может вас не заинтересовать в данном конкретном случае.

Макс Уотерман
источник