4

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

Какой самый простой способ сделать это через командную строку? Можно ли как-то найти все файлы, которые новее, чем время извлечения, и передать их в rm?

Спасибо

2 ответа2

12

Редактировать: Как отмечено в комментариях, tar изменяет mtime и ctime извлеченных файлов, чтобы соответствовать датам в архиве, поэтому этот первый метод не будет работать, если во время извлечения не был использован флаг -m . Последний метод является оптимальным, но может привести к удалению файлов, которые вы хотите, если имена файлов сталкиваются.

find поддерживает флаг -newer file , указывая, что он должен находить файлы новее, чем file. touch имеет аргумент -t для изменения времени доступа / изменения файла. Итак, чтобы исправить упс, произошедший около 7:25:30 вечера:

$ tar xzf whoops.tar.gz
$ touch -t 200909261925.30 whoops-timestamp
$ find . -newer whoops-timestamp

И если вы уверены, что отображаются правильные файлы:

$ find . -newer whoops-timestamp -print0 | xargs -0 rm -v

Альтернативой является удаление всех файлов, перечисленных в архиве, который вы только что извлекли:

$ tar tfz whoops.tar.gz | xargs rm -v
2

Другая альтернатива с поиском:

$ find "/path/to_clean/" -type f -mtime +30 -print0 | xargs -0 rm -f

где +30 - это количество дней, которое вы хотите сохранить.

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