![递归大量目录结构,在 X 天内删除文件](https://linux22.com/image/163750/%E9%80%92%E5%BD%92%E5%A4%A7%E9%87%8F%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84%EF%BC%8C%E5%9C%A8%20X%20%E5%A4%A9%E5%86%85%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6.png)
第一份 Linux 编码工作。
被要求为一个计时作业编写一个脚本,该作业会遍历服务器上的所有文件夹并删除 X 天(可能是 20 天)内的所有文件。
我已经在我的家用 Redhat 机器上测试了下面的代码。
当然,在将这段代码推广到实际使用之前,我有很多忐忑不安。下面的代码工作正常,但我还需要它在“X”天内仅删除文件(而不是目录)。
无法下载、对系统数百个目录和数千个文件进行任何修改。第一次运行此程序时,我预计会删除超过 10,000 个文件,因为我们的客户将其文件留在我们的服务器上并忘记了它们。 (这会唤醒他们!)
我尝试更改第五行“elif [ -f“$i”-a -mtime +21];然后" -删除文件 (rm -i "$1")
不起作用,说“[:mtime:需要二元运算符”
我是否需要另一条 elif 语句,或者我可以使选择标准(仅限文件和“X”天以上的文件)在一行上起作用吗?
代码:
#!/bin/bash
print_folder_recurse() {
for i in "$1"/*; do
if [ -d "$i" ]; then
print_folder_recurse "$i"
elif [ -f "$i" ]; then
rm -i $i #(put the -i in there for #testing, it will be removed)
fi
done
}
路径“/go/to/your/happy/place”
echo "Delete path: $path"
print_folder_recurse $path
谢谢。
答案1
find /your/directory -type f -daystart -mtime +20 -delete
删除-delete
以执行试运行。