Как удалить все файлы, кроме одного, из каталога?

Как удалить все файлы, кроме одного, из каталога?

Мне нужно удалить все файлы, кроме одного (его имя определено), из заданного каталога.

Как это сделать из терминала в OS X? Можно ли это сделать одной командой?

решение1

shopt -s extglob && rm !(non_delete_file)

или

rm -f !(non_delete_file)

или

find . ! -name non_delete_file -delete

Обратите внимание, что приведенная выше findкоманда будет работать рекурсивно — она удалит все файлы и каталоги в текущем каталоге и во всех подкаталогах. Если это проблема, используйте -type f(для сопоставления только файлов) и -maxdepth 1(для сопоставления только в текущем каталоге, игнорируя подкаталоги)

find . -type f -maxdepth 1 ! -name non_delete_file -delete

решение2

  1. переместите файл, который вы хотите сохранить, куда-нибудь за пределы каталога
  2. удалите все в каталоге, используя ваш любимый метод
  3. переместите файл, который вы хотите сохранить, обратно в каталог

Не совсем «высокотехнологично», но при таком подходе гораздо сложнее случайно удалить файл, который вы хотите сохранить.

Очевидно, что этот подход не сработает, если файл должен постоянно существовать в каталоге, пока происходит вся эта бойня.

решение3

Пытаться

rm `ls | grep -v '^defined$'`

Связанный контент