Удалите все, кроме одного (или более) типа файла

Я пытался найти команду для удаления всех файлов в папке, но не типа файла. Но мне, кажется, не повезло. То, что я пробовал до сих пор:

set extended_glob rm !(*.dmg) # this returns zsh:number expected rm ./^*.dmg # this returns no matches found 

Версия zsh, которую я использую, – zsh 5.0.2 (x86_64-apple-darwin13.0.1) .

3 Solutions collect form web for “Удалите все, кроме одного (или более) типа файла”

Опция extended_glob дает вам собственный расширенный синтаксис glob zsh.

 setopt extended_glob rm -- ^*.dmg rm -- ^*.(dmg|txt) 

Вы можете установить опцию ksh_glob для получения шаров ksh . Остерегайтесь того, что в общем случае, когда отрицательный шаблон является последним в слове, zsh может анализировать круглые скобки в качестве классификаторов glob (это не выполняется в режиме эмуляции ksh).

 setopt ksh_glob rm -- !(*.dmg|*.txt) setopt no_bare_glob_qual rm -- !(*.dmg) 

Вы можете использовать find вместо оболочки:

 find . -mindepth 1 -maxdepth 1 ! -name "*.dmg" -delete 

От man find :

  ! expr True if expr is false. This character will also usually need protection from interpretation by the shell. -name pattern Base of file name (the path with the leading directories removed) matches shell pattern pattern. -delete Delete files; true if removal succeeded. If the removal failed, an error message is issued. If -delete fails, find's exit status will be nonzero (when it eventually exits). Use of -delete automatically turns on the -depth option. 

Если вы не можете использовать find по какой-либо причине, вот способ сделать это с помощью zsh (или других оболочек). zsh являющийся zsh , возможно, есть более простой способ сделать это, но поскольку я парень bash , это то, что я придумал:

 for file in *; do if [[ ! "$file" == *.dmg ]]; then rm $file; fi; done 

Другой способ удаления файлов – find , xargs и rm :

 find . -mindepth 1 -maxdepth 1 ! -name '*.dmg' -print0 | xargs -0 rm 
  • Помните половину типизированной команды, пока я проверяю что-то
  • Почему zsh открывает дескриптор файла одним?
  • Почему zsh ведет себя как меньше при запросе базы данных (postgresql)?
  • Расширение поиска истории в zsh
  • Кластеризация идентичных файлов, игнорирующих пробелы и разрывы строк
  • Выход из терминала «nohup ./my_script &» => «У вас есть рабочие задания». ОК, чтобы выйти?
  • Показывать материал под подсказкой в ​​командной строке?
  • Как остановить появление ^ T% в первой строке, когда я открываю новую lxterminal tab с ^ T в zsh?
  • история не сохраняется в zsh
  • Отменить завершение, но только завершение, в zsh
  • Проблема с пониманием привязок ключей
  • Linux и Unix - лучшая ОС в мире.