Удалите все файлы за исключением некоторых от папки в Unix [дубликат]

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

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

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

2
задан 20.03.2017, 12:17

4 ответа

Если это - Bash, Вы могли бы рассмотреть использование расширенного globbing. Включить:

shopt -s extglob

(Вставленный, что Ваш .bashrc если Вы хотите или просто включаете его при необходимости в нем.)

И затем, например, для удаления всех файлов кроме filename1 и filename2

rm !(filename1|filename2)

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

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

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

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

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

3
ответ дан 08.12.2019, 05:52

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

Это легко достигается с командой находки:

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

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

2
ответ дан 08.12.2019, 05:52

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

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

tmpwatch -m 24 /path/to/dir

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

0
ответ дан 08.12.2019, 05:52

Я думаю, можно использовать несколько команд 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! Они могут быть очень опасными:).

0
ответ дан 08.12.2019, 05:52

Теги

Похожие вопросы