我是 bash 新手,我的任务是删除所有 30 天以上的文件,我可以根据文件名 Y_M_D.ext
2019_04_30.txt
弄清楚这一点。
我知道我可以在包含文件的文件夹中列出所有带有 ls
的文件。我知道我可以使用 $ date
获取今天的日期,并且可以配置它以匹配文件格式 $ date "+%Y_%m_%d"
我知道我可以使用 rm
删除文件。
我如何将所有这些结合到一个 bash 脚本中,该脚本删除从今天起 30 天之前的文件?
在伪 python 代码中,我想它看起来像:
for file in folder:
if file.name to date > 30 day from now:
delete file
最佳答案
我绝不是系统管理员,但您可以考虑一个简单的 shell 脚本:
# Generate the date in the proper format
discriminant=$(date -d "30 days ago" "+%Y_%m_%d")
# Find files based on the filename pattern and test against the date.
find . -type f -maxdepth 1 -name "*_*_*.txt" -printf "%P\n" |
while IFS= read -r FILE; do
if [ "${discriminant}" ">" "${FILE%.*}" ]; then
echo "${FILE}";
fi
done
请注意,这可能会被专业人士视为“外行”解决方案。也许这由
awk
处理得更好,不幸的是我不习惯使用它。关于linux - 根据文件名作为日期删除所有超过 30 天的文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55919214/