Мне нужно удалить все файлы, кроме одного (его имя определено), из заданного каталога.
Как это сделать из терминала в 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
- переместите файл, который вы хотите сохранить, куда-нибудь за пределы каталога
- удалите все в каталоге, используя ваш любимый метод
- переместите файл, который вы хотите сохранить, обратно в каталог
Не совсем «высокотехнологично», но при таком подходе гораздо сложнее случайно удалить файл, который вы хотите сохранить.
Очевидно, что этот подход не сработает, если файл должен постоянно существовать в каталоге, пока происходит вся эта бойня.
решение3
Пытаться
rm `ls | grep -v '^defined$'`