Как я могу удалить файл на основе даты его создания в Perl? - PullRequest
3 голосов
/ 23 августа 2009

Мое веб-приложение размещено на сервере Unix с использованием MySQL в качестве базы данных.

Я написал Perl-скрипт для запуска резервного копирования моей базы данных. Скрипт Perl находится внутри папки cgi-bin и работает. Мне нужно только установить cronjob и запускать Perl-скрипт один раз в день.

Резервные копии хранятся в папке с именем db_backups,. Однако я также хочу добавить команду в свой скрипт Perl для удаления любых файлов внутри папки db_backups , которые старше, чем, скажем, 10 дней назад.

Я искал все выше и ниже для команд Unix и не могу найти ничего, что соответствует тому, что мне нужно.

Ответы [ 4 ]

9 голосов
/ 23 августа 2009

if (-M $file > 10) { unlink $file }

или в сочетании с File::Find::Rule

my $ten_days_ago = time() - 10 * 86400;
my @to_delete = File::Find::Rule->file()
  ->mtime("<=$ten_days_ago")
  ->in("/path/to/db_backup");
unlink @to_delete;
4 голосов
/ 23 августа 2009

В Unix вы не можете, потому что дата создания файла не сохраняется в файловой системе .

Вы можете проверить stat и -M (время модификации) / -C ( время смены инода ) / -A (время доступа), если вам нужно простое выражение с относительными временными метками (как давно).

2 голосов
/ 23 августа 2009

Я искал высокие и низкие команды Unix и не могу найти ничего, что соответствует тому, что мне нужно.

Выезд find(1) и xargs(1). Предупреждение: эти команды могут изменить вашу жизнь в командной строке.

$ find /path/to/backup -type f -mtime +10 -print0 | xargs -0 echo rm -f

Если вы уверены, что будете делать то, что вы хотите (тм), удалите echo. Он говорит, примерно, начиная с /path/to/backup, спускается в поисках простых файлов, чей mtime превышает 10 дней, и печатает их имена в xargs, которые передают эти имена в rm в пакетном режиме. .

(print0 и его дополнение -0 являются расширениями GNU - вы упоминали, что работали в Linux - которые позволяют безопасно обрабатывать пробелы в именах файлов.)

0 голосов
/ 23 августа 2009

Вы должны быть в состоянии сделать это, не прибегая к командам Unix. Просмотрите все файлы в вашем каталоге, используйте stat для каждого файла, чтобы получить время последнего изменения файла, затем используйте unlink для удаления файла, если старше, чем вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...