2

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

Я часто сталкиваюсь с этой проблемой. У меня есть набор файлов в папке, и я хотел бы удалить все из них, кроме нескольких.

Например: у меня есть файлы, названные по дате создания (например, 11-1-11.tar, 10-1-11.tar и т.д.). Теперь я хотел бы удалить файлы, такие как 10-1-11, 9-1-11 и так далее, но не некоторые другие файлы. В основном я хотел бы обеспечить, что все должно быть удалено и что следует сохранить. Как бы я это сделал?

4 ответа4

3

Если это BASH, вы можете использовать расширенную глобализацию. Включить:

shopt -s extglob

(Поместите это в ваш .bashrc если хотите, или просто включите, когда вам это нужно.)

А затем, например, удалить все файлы, кроме filename1 и filename2

rm !(filename1|filename2)

Вы также можете использовать подстановочные знаки, такие как *.

Или вы можете удалить все те, которые соответствуют шаблону:

rm +([0-9])-+([0-9])-+([0-9]).tar

удалит все # - # - #. tar-файлы (где числа имеют 1 или более цифр).

Неясно, будет ли это соответствовать вашим потребностям или нет. Подробнее здесь.

2

Если имя файла соответствует дате создания файла, может быть проще удалить файлы старше определенного дня.

Это легко достигается с помощью команды find:

find /home/john/files -type f -mtime +30 -delete

это приведет к удалению файлов в /home/john/files , дата модификации которых превышает 30 дней назад.

0

Вы также можете делать то, что вы хотите с tmpwatch

http://linux.about.com/library/cmd/blcmdl8_tmpwatch.htm

tmpwatch -m 24 /path/to/dir

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

0

Я думаю, вы можете использовать несколько команд UNIX в одном канале, и это решит вашу проблему. Одним из возможных решений является использование find | grep | xargs rm -rf . Например:

$ find /path/to/directory/tree -type f | grep -v -E -f /path/to/exclude/file | xargs rm -rf

Для исключения некоторых файлов просто поместите их имена в файл /path/to/exclude/file . Например:

very_useful_file.tar.gz
very_important_file.jpg

Для предотвращения некорректного стирания важных файлов предлагаю сделать резервную копию всех файлов. Также полезно использовать xargs с опцией -p , которая ...Prompt the user about whether to run each command line and read a line from the terminal.

Можно использовать инструмент find без grep/xargs. Это будет что-то вроде этого:find /path/to/tree -type f ! -name "exlude_pattern"

Перед использованием этих команд внимательно прочитайте справочные страницы для find/grep/xargs ! Они могут быть очень опасными :).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .