LINUX.ORG.RU

удаление файлов рекурсивно по маске с датой создания не позднее чем Х дней назад


0

1

задача: удалить все файлы в категории и ее подкатегориях, которые попадают под маску, но при этом созданы не позднее чем 3 дня назад (т.е. оставим все самые свежие - за последние три дня).

удаление просто по маске: find PATH -name «*.FILE_EXT» -exec rm {} \;

а как удалить с учетом требования по дате?


atime, mtime насчет «созданных» - не знаю.

anonymous ()

вопрос решился:

find -ctime +DAYS PATH -name «*.FILE_EXT» -exec rm {} \;

DAYS - кол-во дней PATh - путь к корневой директории *.FILE_EXT - маска для файла

удалит все файлы с датой создания старше 3-х дней по заданной маске

scu ()

-exec rm {} \;

Это делается проще: «-delete». Если ты этого не знал, то ман не прочитал, поэтому в первую очередь советую его сначала таки прочитать, а потом бежать на лор. Конкретно понадобятся опции -*time, -newer, -newer*.

gentoo_root ★★★★★ ()

Измененный != созданный.

anonymous ()
Ответ на: комментарий от scu

-ctime

удалит все файлы с датой создания старше 3-х дней

Всё-таки ман не прочитал. А там белым по чёрному написано:

-ctime n File's status was last changed n*24 hours ago.

Это не дата создания.

gentoo_root ★★★★★ ()
Ответ на: комментарий от gentoo_root

-delete будет работать быстрее? если да, насколько?

scu ()
Ответ на: комментарий от anonymous

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

scu ()
Ответ на: комментарий от scu

-delete будет работать быстрее?

А просто взять и проверить лень? В случае использования «-delete» find сам сразу делает unlink(), а в случае «-exec rm» для каждого файла будет вызываться fork(), exec(), создастся новый процесс rm, который получит имя файла из командой строки, распарсит параметры и в конце концов сделает unlink. Конечно, первое быстрее, чем второе.

BTW, ещё можно так: «-exec rm '{}' +», тогда в командную строку rm передадутся сразу несколько путей и лишних процессов будет меньше, чем при «-exec rm '{}' \;».

если да, насколько?

Ты же понимаешь, что это зависит от множества факторов, и на разных компьютерах разница будет разной?

gentoo_root ★★★★★ ()
Ответ на: комментарий от scu

в данном случае нужно было найти файлы именно созданные от нужной даты

Ну так анонимус всё правильно говорит, потому что ctime — это не дата создания. Он может меняться. Не можешь прочитать ман, так прочитай Википедию:

-ctime — время последнего изменения владельца или прав доступа к файлу.

gentoo_root ★★★★★ ()

В тред врывается zsh, и выносит find

rm **/*.jpg(m+3)

zolden ★★★★★ ()
Ответ на: комментарий от gentoo_root

man я читала.
в моем случае ни права, ни группа\пользователь не меняются, и это самое близкое что я нашла к дата_создания (мне не нужна дата модификации).

если вы знаете способ сравнивать именно _дату_создания_, напишите пожалуйста

scu ()
Ответ на: комментарий от scu

если вы знаете способ сравнивать именно _дату_создания_, напишите пожалуйста

Например, параметр «-newerBt». В данном случае будет что-то типа:

find «$path» ! -newerBt '3 day ago' -delete

Но на моей ФС (ext4) это не работает — похоже, что она вообще не сохраняет дату создания. Если это так, то проблему в исходном виде решить не получится и придётся использовать ctime. Возможно, на других ФС будет работать и вариант с -newerBt.

gentoo_root ★★★★★ ()
Ответ на: комментарий от gentoo_root

на моей также не хранит, поэтому я и решила использовать ctime, как наиболее близкую к дате создания.

scu ()
Ответ на: комментарий от scu

дата_создания (мне не нужна дата модификации)

Часто модификация приводит к тому, что исходный файл удаляется, вместо него остается измененная копия (inode соотвественно меняется).

vcs развернуть и смотреть дату создания его средствами не судьба?

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.