Как удалить все файлы, кроме одного, в Unix? [Дубликат]


13

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

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

Что-то вроде

 rm -rf -ignore myfile.txt *

Ответы:


20
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

Собирался делать очень похожее, используя find, но твоя работа и ты был быстрее. +1
Рори Олсоп

2
это не удастся, если у вас есть файлы с пробелами в их именах.
Мат

Для обработки имен файлов с пробелами можно использоватьls -1 | grep -v do_not_delete | xargs -I files rm "files"
sebhofer

8

Предполагая, что вы используете оболочку bash (наиболее распространенный случай), вы можете использовать символ глобализации отрицания (расширение пути):

rm -rf !(myfile.txt)

При этом используется расширенная глобализация, поэтому вам нужно сначала включить это:

shopt -s extglob




0

Для rmрекурсии вы должны выполнить рекурсию findи исключить файлы, которые вы хотели сохранить (или grep, но это может привести к проблемам с пробелами). Для глобуса оболочки современные оболочки имеют шаблоны глобуса, которые можно использовать для исключения файлов; это может быть объединено с рекурсией глобуса на уровне оболочки, когда она доступна (например, zshимеет rm **/*~foo/bar- обратите внимание, что это может привести к ограничению длины аргумента для больших деревьев каталогов).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.