2013-07-20 5 views
11

Хотелось бы удалить файлы старше 59 минут. У меня это до сих пор:Удалить файлы старше X минут

find /tmp -daystart -maxdepth 1 -mmin +59 -type f -name "*.*" -exec rm -f {} \; 

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

Я прочитал справочную страницу, и это похоже на основное время в начале дня, а не с 24 часов назад. Если это так, то как я могу точно удалить файлы, которые старше 59 минут? Нужно ли мне учитывать daystart и добавить еще несколько минут?

Пример:

[email protected]:/tmp$ ls -la 
total 8 
drwxrwxrwt 2 root root 4096 Jul 20 14:39 ./ 
drwxr-xr-x 23 root root 4096 Jun 25 18:34 ../ 
-rw-rw-r-- 1 ubuntu ubuntu 0 Jul 20 12:35 a.txt 

Обе следующие команды, вернуть файл:

[email protected]:/tmp$ find /tmp -daystart -maxdepth 1 -mmin +59 -type f -name "*.*" 
/tmp/a.txt 

И:

[email protected]:/tmp$ find /tmp -daystart -maxdepth 1 -mmin +359 -type f -name "*.*" 
/tmp/a.txt 

Однако файл не старше 659 минут (10,9 часов)! Но в 759 (12.65 часов) он больше не возвращает файл?

+0

Кстати. Мне нравится параметр '-delete' вместо' -exec rm -f {} \; '. – lanes

ответ

14

При использовании с -mmin, -daystart, по-видимому, рассчитывает от конец сегодняшнего дня, а не начало.

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

[email protected]:~/testdir$ date 
Sat Jul 20 10:02:20 CDT 2013 
[email protected]:~/testdir$ ls -l 
total 0 
-rw-r--r-- 1 barmar adm 0 Jul 20 09:57 a.txt 
[email protected]:~/testdir$ find . -maxdepth 1 -mmin +2 -type f 
./a.txt 
[email protected]:~/testdir$ find . -maxdepth 1 -mmin +10 -type f 
Смежные вопросы