Возможное дублирование:
Как удалить все файлы в каталоге, кроме некоторых?
Как удалить все, кроме одного (или некоторых) файлов в Unix?
Что-то вроде
rm -rf -ignore myfile.txt *
Возможное дублирование:
Как удалить все файлы в каталоге, кроме некоторых?
Как удалить все, кроме одного (или некоторых) файлов в Unix?
Что-то вроде
rm -rf -ignore myfile.txt *
ls * | grep -v dont_delete_this_file | xargs rm -rf
Пример :
mkdir test && cd test
touch test1
touch test2
touch test3
touch test4
touch test5
Чтобы удалить все файлы, кроме «test2»:
ls * | grep -v test2 | xargs rm -rf
Тогда вывод ls:
test2
РЕДАКТИРОВАТЬ:
Спасибо за комментарий. Если каталог содержит несколько файлов с пробелами:
mkdir test && cd test
touch "test 1"
touch "test 2"
touch "test 3"
touch "test 4"
touch "test 5"
Вы можете использовать (с Bash):
rm !("test 1"|"test 4")
вывод 'ls':
test 1
test 4
ls -1 | grep -v do_not_delete | xargs -I files rm "files"
Предполагая, что вы используете оболочку bash (наиболее распространенный случай), вы можете использовать символ глобализации отрицания (расширение пути):
При этом используется расширенная глобализация, поэтому вам нужно сначала включить это:
источник
источник
источник
Эта страница предоставляет различные варианты в зависимости от оболочки: http://www.unix.com/unix-dummies-questions-answers/51400-how-remove-all-except-one-file.html
источник
Для
rm
рекурсии вы должны выполнить рекурсиюfind
и исключить файлы, которые вы хотели сохранить (илиgrep
, но это может привести к проблемам с пробелами). Для глобуса оболочки современные оболочки имеют шаблоны глобуса, которые можно использовать для исключения файлов; это может быть объединено с рекурсией глобуса на уровне оболочки, когда она доступна (например,zsh
имеетrm **/*~foo/bar
- обратите внимание, что это может привести к ограничению длины аргумента для больших деревьев каталогов).источник