Мне нужна ваша помощь, чтобы найти способ cron-удалить некоторые файлы в нескольких подкаталогах на основе формата даты в имени.

Я использую этот скрипт в YouTube-DL:

youtube-dl --yes-playlist --download-archive archive.txt --continue --ignore-errors --no-overwrites --dateafter now-1week -o '%(uploader)s/%(upload_date)s - %(title)s' -a rss.txt

С помощью сценария у меня есть это:

Videos
│   rss.txt
│   archive.txt    
│
└───Artiste_Youtube_01
│   │   20170906 - Title.mkv
│   │   YYYYMMDD - Title.mkv
|   
└───Artiste_Youtube_02
    │   YYYYMMDD - Title.mkv
    │   YYYYMMDD - Title.mkv

И я хочу автоматически удалить MKV старше 1 недели +1 день.

Я вижу это:

find ./my_dir -mtime +10 -type f -delete

Это хорошо для даты создания, но не для названной даты файла.

Вы можете мне помочь? Благодарю.

1 ответ1

0

Вы должны сравнить префикс имени с датой. Вы можете легко получить элемент сравнения с помощью: date -d '-10 days' +%Y%m%d . Затем вы перебираете файлы:

cutDate=$(date -d '-10 days' +%Y%m%d)
for f in */*.mkv
do
    prefix=$(sed -r 's:.*/([0-9]{8}) -.*:\1:' <<<"$f")
    [[ $prefix < $cutDate ]] && rm "$f"
done

Если у вас есть более подкаталоги уровней, добавить больше звезд в for схемы:for f in */*/*.mkv

(предупреждение: не проверено)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .