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


38

我有一个包含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

Answers:


54

您可以从说开始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 {} +

使用-delete更简单(语法,并且没有生成任何子进程来执行删除操作),但可能无法在所有系统上使用。rm -f {} +最好,如果一个命令行中有太多文件,它将批量删除文件。rm -f {}';' 如果一个命令行中有足够多的文件,将给命令提供太长的错误。
gaoithe

-1

或循环执行:

for x in $(find /var/dtpdev/tmp/ -type f -mtime +15); do rm "$x"; done

这不适用于其中包含空格的文件。
Drav Sloan

您可以改用while循环,它应该处理带空格的文件。查找/ var / dtpdev / tmp / -type f -mtime +15 | 读x时 rm“ $ x”; 完成
David Okwii
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.