如何在unix中查找并删除早于特定日期的文件?

如何在unix中查找并删除早于特定日期的文件?

我有一个日志文件夹,里面有 7 个文件夹。这七个文件夹中也有子文件夹,这些子文件夹也有子文件夹。我想删除所有文件夹(包括子文件夹)中超过 15 天的所有文件,而不影响文件夹结构,这意味着只有文件。

mahesh@inl00720:/var/dtpdev/tmp/ > ls
A1  A2  A3  A4  A5  A6  A7

mahesh@inl00720:/var/dtpdev/tmp/A1/ > ls
B1 B2 B3 B4 file1.txt file2.csv

答案1

你可以这样开始find /var/dtpdev/tmp/ -type f -mtime +15:这将找到所有超过 15 天的文件并打印它们的名称。或者,您可以-print在命令末尾指定,但这是默认操作。建议首先运行上述命令,查看选择了哪些文件。

验证该find命令列出了您要删除的文件(而不是其他文件)后,您可以添加一个“操作”来删除这些文件。执行此操作的典型操作是:

  1. -exec rm -f {} \;(或者,等效地,-exec rm -f {} ';'
    这将rm -f在每个文件上运行;例如,

    rm -f /var/dtpdev/tmp/A1/B1; rm -f /var/dtpdev/tmp/A1/B2; rm -f /var/dtpdev/tmp/A1/B3; …
    
  2. -exec rm -f {} +
    这将rm -f同时在多个文件上运行;例如,

    rm -f /var/dtpdev/tmp/A1/B1 /var/dtpdev/tmp/A1/B2 /var/dtpdev/tmp/A1/B3 …
    

    因此它可能比选项 1 稍快一些。(如果您有数千个文件,则可能需要运行rm -f几次。)

  3. -delete
    这告诉find自己删除文件,而不运行rm.这可能比变体快得多-exec,但它并不适用于所有系统。

因此,如果您使用选项 2,整个命令将是:

find /var/dtpdev/tmp/ -type f -mtime +15 -exec rm -f {} +

答案2

另一种选择可能是通过管道传输命令的输出find并使用xargs来删除它们:

find /var/dtpdev/tmp/ -type f -mtime +15 | xargs rm

但简的赞成答案仍然比这个更有效。

答案3

尝试:

find /path/to/files/  -cmin +240  -type f -name *.php  -delete

或者

find /path/to/files/ -type f -name *.php  -mtime +30 -exec rm {} \;

第一个将使用 的内置删除功能删除 4 小时或更早的文件find;第二个将使用rminside子句删除 30 天或更早的文件-exec

答案4

我喜欢

rm -rf `find yadi` 

因为它的简单性。那些后面的勾号说“先处决我”。所以你正在rm -rf对抗他们之间的任何结果。

相关内容