Возможный дубликат:
Как удалить все файлы в каталоге кроме некоторых?
Я часто сталкиваюсь с этой проблемой. Я имею ряд файлов в папке и хотел бы удалить всех их кроме некоторых.
Например: Мне назвали файлы согласно дате создания (как 11-1-11.tar, 10-1-11.tar и так далее). Теперь я хотел бы удалить файлы как 10-1-11, 9-1-11 и так далее, но не некоторые другие файлы. В основном я хотел бы осуществить то, что все должны быть удалены и что должно быть сохранено. Как я сделал бы это?
Если это - Bash, Вы могли бы рассмотреть использование расширенного globbing. Включить:
shopt -s extglob
(Вставленный, что Ваш .bashrc
если Вы хотите или просто включаете его при необходимости в нем.)
И затем, например, для удаления всех файлов кроме filename1 и filename2
rm !(filename1|filename2)
Можно также использовать подстановочные знаки как * там также.
Или Вы могли удалить все те, которые соответствуют шаблону:
rm +([0-9])-+([0-9])-+([0-9]).tar
удалил бы все #-#-#.tar файлы (где числа имеют 1 или более цифр).
Неясно, удовлетворило ли это Ваши потребности или нет. Больше деталей здесь.
Если имя файла соответствует дате создания файла, может просто быть легче удалить файлы, более старые, чем определенный день.
Это легко достигается с командой находки:
find /home/john/files -type f -mtime +30 -delete
это удалило бы файлы под /home/john/files
которые имеют дату модификации дольше, чем 30 дней назад.
можно также смочь сделать то, что Вы хотите с tmpwatch
http://linux.about.com/library/cmd/blcmdl8_tmpwatch.htm
tmpwatch -m 24 /path/to/dir
удалит все файлы в dir, более старом, чем один день, так как в последний раз используется (-m).
Я думаю, можно использовать несколько команд 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
! Они могут быть очень опасными:).