2010-09-09 3 views

ответ

20

Я думаю, что следующий должен делать то, что вы хотите:

touch -t 201007010000 dummyfile 
find /path/to/files -type f ! -newer dummyfile -delete 

Первая строка создает файл, который был изменен в последний раз на 1 июля 2010 года вторая линия находит все файлы в каталоге/путь/к/файлу который имеет дату не новее, чем dummyfile, а затем удаляет их.

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

+0

После опуская '-' перед«е ', теперь, похоже, перечислены все файлы. Если я сброшу '!' он отображает только новые файлы. –

+0

Я бесстыдно украл/изменил ответ с http://forums.devshed.com/unix-help-35/finding-a-file-modified-created-before-a-specific-date-468700.html – bramp

+1

о, прошу прощения , не должно быть -f, просто f. – bramp

8

Это должно работать:

find /file/path ! -newermt "Jul 01" 

Чтобы найти файлы, которые вы хотите удалить, поэтому команда удалить их будет:

find /file/path ! -newermt "Jul 01" -type f -print0 | xargs -0 rm 
+0

Эрик, какая версия находки имеет «новый». Я не могу найти это на любой странице руководства. – bramp

+0

@bramp: GNU 'find' имеет этот вариант. Однако Unix/Linux не имеет понятия о дате создания, поэтому я бы использовал '-newermt'. 'C' - это изменение статуса inode, а не« создание ». –

+0

@ Dennis: Спасибо за разъяснение. –

Смежные вопросы