我有一个文件夹用于日志,其中包含 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
Run Code Online (Sandbox Code Playgroud)
Jan*_*Jan 74
你可以先说find /var/dtpdev/tmp/ -type f -mtime +15
。这将找到所有超过 15 天的文件并打印它们的名称。或者,您可以-print
在命令末尾指定,但这是默认操作。建议先运行上面的命令,看看选择了哪些文件。
在您确认该find
命令列出了您要删除的文件(没有其他文件)后,您可以添加一个“操作”来删除这些文件。执行此操作的典型操作是:
-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; …
Run Code Online (Sandbox Code Playgroud)-exec rm -f {} +
这将一次rm -f
在许多文件上运行;例如,
rm -f /var/dtpdev/tmp/A1/B1 /var/dtpdev/tmp/A1/B2 /var/dtpdev/tmp/A1/B3 …
Run Code Online (Sandbox Code Playgroud)
所以它可能比选项 1 稍快。(rm -f
如果你有数千个文件,它可能需要运行几次。)
-delete
find
自己删除文件,而不运行rm
. 这可能比-exec
变体快得多,但它不适用于所有系统。因此,如果您使用选项 2,则整个命令将是:
find /var/dtpdev/tmp/ -type f -mtime +15 -exec rm -f {} +
Run Code Online (Sandbox Code Playgroud)