我需要你的帮助来找到一种方法来根据名称中的日期格式定期删除多个子目录中的某些文件。
我在 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
我想自动删除超过 1week+1day 的 mkv。
我已经看到了这个:
find ./my_dir -mtime +10 -type f -delete
它适用于创建日期但不适用于文件的命名日期。
你能帮助我吗?谢谢。
答案1
您必须将名称前缀与日期进行比较。您可以使用以下方式轻松获取比较项: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
(警告:未经测试)