查找和删除多个目录中的文件

时间:2013-01-17 21:21:54

标签: bash centos command-line-interface

现在我有一个cron作业,每周运行一次,为我查找和删除在此期间累积的文件。它是这样的:

find $DIR1 -maxdepth 1 \( -name \file1-\* -o -name \*file2-\* \) -mtime +7 >> /tmp/file.txt

但是,我想在服务器上的另一个目录中执行相同的操作(必须是$ DIR1和$ DIR2 - 在整个系统中从root执行查找是不可行的)但我觉得,在重复命令时会工作,这将是丑陋,多余和低效。

所以,我想以某种方式构建一个列表(即FILES =“file1 file2 file3”),并且有一个简化的方法来检查两个目录,然后像上面那样输出找到的文本文件的结果。

我不确定如何做到这一点 - 我想过可能会做一个循环,但这似乎太基本了。任何人都可以在这里给我一个骨头并指出我正确的方向吗?我担心的一件大事就是让它与find一起工作。

编辑:为了澄清,$ DIR2中的第二次搜索是针对超过14天的文件(mtime +14),因此只需将$ DIR2添加到现有字符串中就不起作用。

谢谢!

2 个答案:

答案 0 :(得分:0)

你试过这个:

find $DIR1 $DIR2 -maxdepth 1 \( -name \file1-\* -o -name \*file2-\* \) -mtime +7 >> /tmp/file.txt

答案 1 :(得分:0)

编写bash脚本(即delete_files.sh)并在crontab中添加bash脚本要容易得多。所以下次,如果你想用不同的目录添加更多的模式,那么你只需要用bash脚本编写,它将自动添加到cronjob中。

#!/usr/bin/bash

echo $(find $DIR1 $DIR2 -maxdepth 1 \( -name \file1-\* -o -name \*file2-\* \) -mtime +7) >> /tmp/file.txt;

OR

#!/usr/bin/bash

echo $(find $DIR1 -maxdepth 1 \( -name \file1-\* -o -name \*file2-\* \) -mtime +7) >> /tmp/file.txt;
echo $(find $DIR2 -maxdepth 1 \( -name \file1-\* -o -name \*file2-\* \) -mtime +7) >> /tmp/file.txt;