Можливий дублікат:
Як видалити всі файли в каталозі, крім деяких?
Як видалити всі файли, крім одного (або деяких) в 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"
Ця сторінка містить різноманітні варіанти залежно від оболонки: http://www.unix.com/unix-dummies-questions-answers/51400-how-remove-all-except-one-file.html
Для рекурсивності rm
вам потрібно буде виконати рекурсію з find
та виключити файл (и), який ви хотіли зберегти (або grep
, але це може спричинити проблеми з пробілами). Для глобуса оболонки сучасні оболонки мають шаблони глобулів, які можна використовувати для виключення файлів; це може поєднуватися з глобальною рекурсією на рівні оболонки, коли вона доступна (наприклад zsh
, rm **/*~foo/bar
майте на увазі, що це, ймовірно, може наштовхнутися на обмеження довжини аргументів для великих дерев каталогів).