LINUX.ORG.RU

bash - удаление «старых» каталогов


0

1

Есть скрипт, который создает каждый день каталог с именем ГГГГ-ММ-ДД. За определенное время их накапливается определенное количество. Как удалять каталоги созданные конкретное количество дней назад?

Deleted
Ответ на: комментарий от ananas

Это понятно но как вычесть из текущей даты нужное количество дней, что бы получить дату которую удалять?

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

> Это понятно но как вычесть из текущей даты нужное количество дней, что бы получить дату которую удалять?

man find прочитать, чтобы посмотреть, что конкретно передается в качестве аргумента -ctime, не судьба?

ananas ★★★★★
()

Если в каталоги только в день его создания, то метод ananas'a правильный, разве что -maxdepth 1 добавить.

Если в каталоги пишут в разные дни, то искать надо по имени ГГГГ-ММ-ДД.

sdio ★★★★★
()
#!/usr/bin/perl -w
use strict;
use Date::Calc qw ( Today Add_Delta_Days Compress );

# Config section
my $dir = '.';
my $days = 21;

local *DH;
my ($sdir, $bnd) = ('', Compress(Add_Delta_Days(Today(), -$days)));

opendir(DH, $dir);
while (defined($sdir = readdir(DH))) {
        my @ymd = (($sdir =~ /(\d{4})-(\d{2})-(\d{2})/));
        next unless ((@ymd == 3) && (Compress(@ymd) < $bnd));
        print "$dir/$sdir\n";
};
closedir(DH);

exit 0;

Вместо «print «$dir/$sdir\n»» может быть любая нужная операция, например, «`rm -r $dir/$sdir`».

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

для сравнения имен можно использовать башизм

[[ $dirname < $(date -d"-${DAY}days" "+%Y-%m-%d") ]] && rm -rf $dirname

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

как вычесть из текущей даты нужное количество дней, что бы получить дату которую удалять?

man date

date -d "5 day ago"
MKuznetsov ★★★★★
()
Ответ на: комментарий от xydo

> xargs лучше не юзать НИКОГДА!

Обоснуйте.

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