[Linux] 我想使用 find 命令一次性删除服务器上的所有文件!

目录
介绍
大家好,我是Paru,系统解决方案部门的一名一年级基础设施工程师,2024届毕业生。
转眼间,新年就到了,加入Beyond也快一年了。时间过得真快,我都有点害怕了!⛄
,但文件太多,一个一个删除效率太低!分享如何使用 Linux 命令“find”删除文件。上的删除要求
如果能熟练掌握就很方便,但一步走错可能会抹掉整个部分,这很可怕,所以我要练习使用它,避免任何可怕的经历!
此外,还有许多其他关于 Linux 入门命令的文章,如果您感兴趣,请浏览一下。
[Linux] 命令行中的“~”、“$”和“#”符号分别代表什么意思?[面向初学者]
find 命令是什么?
基本格式
首先,`find` 命令是搜索文件和目录的命令
可以指定多个文件和目录作为搜索目标。
find 命令的基本格式如下:
查找 [搜索路径] [选项] [操作]
实际应用后,效果如下。
查找 /var/log/test_log -name "file_1"-打印
上述命令指定 /var/log/test_log 下的文件名(-name "file_1"),并显示列表(-print)。
由于命令可以根据需要进行任意修改,因此某些命令看起来可能复杂难用,但其基本格式其实非常简单。我们将在下一节详细介绍选项和操作。
选项示例
我们还将介绍 `find` 命令的各种选项。
虽然还有很多其他选项,但本文主要列出基本选项和必要的命令。
| 选项 | 解释 |
-name "[文件名]" |
指定文件名通过 |
-iname "[文件名]" |
文件名(不区分大小写)。 |
-路径[文件名]" |
通过指定路径名称的子字符串或特定模式来搜索 |
-ipath "[filename]" |
使用路径名称的子字符串或特定模式(不区分大小写)搜索匹配项。 |
-type [文件类型] |
文件类型你可以通过指定 ——你可以在“type”后面添加“f”(表示普通文件)或“d”(表示目录)来指定类型。 |
-mtime[天数] |
在指定天数之前更新的文件。搜索 |
-atime[天数]" |
在指定天数之前访问过的文件。搜索 |
-newermt[日期和时间]” |
自指定日期和时间以来已更新的文件 |
如何在操作中指定删除
在此“操作”,处理方法指的是
这次,我们想重点介绍删除方法,因此如何使用 `rm` 命令删除文件我将介绍
即使只是简单地删除文件,也可以使用多种方法。
——作为示例,这些命令用于将 find 命令指定的多个文件传递给 rm 命令进行删除| xargs rm -p”、“-exec rm {} +”和“-exec rm {} \;,并在表格中对它们进行比较。
| 行动 | 处理方法 | 命令说明 | 如何处理参数 |
| | xargs -p rm | 由于多个文件一次性传递给 `rm`,因此 `rm` 只执行一次 → 即使删除大量文件,处理速度也很快。 |
“xargs”不是一个选项;它是一个单独的命令 ,可以通过用“|”连接与其他各种命令一起使用。 |
空白字符(空格、换行符等)被识别为参数分隔符 → 如果路径中有空格,则可能无法正确识别。 |
| -exec rm {} + | 由于多个文件一次性传递给 `rm`,因此 `rm` 只执行一次 → 即使删除大量文件,处理速度也很快。 |
“-exec”是find命令的一个选项 →它不能与其他命令一起使用。 |
参数是固定的 → 即使路径中有空格,参数也会被识别为一个整体。 |
| -exec rm {} \; | 由于多个文件是逐个传递给 `rm` 的,因此 `rm` 会针对每个文件执行一次 → 删除大量文件会变得缓慢且消耗资源。 |
“-exec”是find命令的一个选项 →它不能与其他命令一起使用。 |
参数是固定的 → 即使路径中有空格,参数也会被识别为一个整体。 |
我只是粗略地总结了一下,但是看看这张表格,-exec rm -i {} \;”的处理时间比“-exec rm {} +你不觉得
虽然它肯定不适合删除大量文件之类的任务,但“假定参数数量固定的命令和程序对于-exec ~ {} \;。
例如,FileDeleter.exe假设我们创建一个名为
该程序可以像rm命令一样执行删除操作,但它接受一个参数。
使用该程序和find命令file_1、 file_2和 file_3 假设我们想
“-exec FileDeleter.exe {} +使用 file_1、 file_2和 file_3 传递FileDeleter.exe只能接受一个参数的
相反,使用“-exec FileDeleter.exe {} \;逐个FileDeleter.exe,因此可以正确执行。
这里我们将使用的 `rm` 命令可以接受可变数量的参数,只要参数数量不超过最大值即可。
但是,有些程序,例如“FileDeleter.exe”,其设计假定参数数量是固定的。
在这种情况下,您可能会遇到 `-exec ~ {} +` 不起作用,但 `-exec ~ {} \;` 肯定可以执行的情况。
因此,根据要对目标参数执行的处理类型来选择使用哪种操作您需要
我之前详细讲解过“-exec”命令,但
它可以高效地删除多个文件,并且可以与其他命令结合使用xargs 来执行文件删除操作。(我想掌握这些易于使用的命令!✊)
尝试使用 find 命令删除该文件。
删除前
这次,我们将使用以下命令格式执行删除操作。
find [搜索目标路径] -type [类型] [选项] '[天数或日期和时间]' | xargs -p rm
` xargs`命令接受参数(在本例中为要删除的文件或目录),并将它们一次性传递给命令(在本例中为 `rm`)。`
选项-p`会显示一个确认提示。您必须对“是否要删除?”的确认信息回答 `y`,否则文件将不会被删除,因此最好始终包含此选项。
顺便一提,如果要删除指定路径下的所有目录,rm在-r需要
不过,由于我们这里只删除文件,所以就不添加这个选项了。
最后也是最重要的一点,为了安全起见, 请在删除文件之前尝试运行“ls”命令而不是“rm”命令。
如果您正确输入了命令,它将查找并显示相关文件,从而防止误删。
删除早于指定日期和时间的文件
咱们来实际试一试。
1. 创建文件
我创建了以下文件。
这次, 想删除所有在2024年12月5日之前更新的文件。
[root@localhost test_log]# ll /var/log/test_log 总计 0 -rw-r--r--. 1 root root 0 2024年12月1日 file_1 -rw-r--r--. 1 root root 0 2024年12月2日 file_2 -rw-r--r--. 1 root root 0 2024年12月3日 file_3 -rw-r--r--. 1 root root 0 2024年12月4日 file_4 -rw-r--r--. 1 root root 0 2024年12月5日 file_5 -rw-r--r--. 1 root root 0 2024年12月6日 file_6 -rw-r--r--. 1 root root 0 2024年12月7日 file_7 -rw-r--r--. 1 root root 0 2024年12月8日 file_8 -rw-r--r--. 1 root root 0 2024年12月9日 file_9
2. 检查要删除的文件
选项“!-newermt”并指定日期为2024年12月5日。
而不是rm命令 ls命令 2024年12月1日至12月4日之间更新的文件(file_1至file_4)是否存在
当系统询问“是否运行ls?”时,输入“y”,即可显示要删除的文件。
[root@localhost ~]# find /var/log/test_log -type f ! -newermt 'Dec 5 2024' | xargs -p ls ls /var/log/test_log/file_2 /var/log/test_log/file_3 /var/log/test_log/file_4 /var/log/test_log/file_1?...y /var/log/test_log/file_1 /var/log/test_log/file_2 /var/log/test_log/file_3 /var/log/test_log/file_4
3. 删除文件
确认要删除的文件后,就可以执行删除操作了。
`ls` `rm` 并执行该命令。系统会询问“是否要删除?”,y输入
[root@localhost ~]# find /var/log/test_log -type f ! -newermt 'Dec 5 2024' | xargs -p rm rm /var/log/test_log/file_1 /var/log/test_log/file_2 /var/log/test_log/file_3 /var/log/test_log/file_4?...y
4. 检查文件
文件已成功删除。
您可以确认,2024年12月5日之前更新的文件已被删除。
[root@localhost test_log]# ll /var/log/test_log 总计 0 -rw-r--r--. 1 root root 0 12月 5 2024 file_5 -rw-r--r--. 1 root root 0 12月 6 2024 file_6 -rw-r--r--. 1 root root 0 12月 7 2024 file_7 -rw-r--r--. 1 root root 0 12月 8 2024 file_8 -rw-r--r--. 1 root root 0 12月 9 2024 file_9
在指定日期和时间之后删除文件
接下来, 想删除 2024 年 12 月 5 日之后更新的所有文件。
1. 创建文件
我像之前一样创建了文件。
[root@localhost test_log]# ll /var/log/test_log 总计 0 -rw-r--r--. 1 root root 0 2024年12月1日 file_1 -rw-r--r--. 1 root root 0 2024年12月2日 file_2 -rw-r--r--. 1 root root 0 2024年12月3日 file_3 -rw-r--r--. 1 root root 0 2024年12月4日 file_4 -rw-r--r--. 1 root root 0 2024年12月5日 file_5 -rw-r--r--. 1 root root 0 2024年12月6日 file_6 -rw-r--r--. 1 root root 0 2024年12月7日 file_7 -rw-r--r--. 1 root root 0 2024年12月8日 file_8 -rw-r--r--. 1 root root 0 2024年12月9日 file_9
2. 检查要删除的文件
这次,-newermt我们将指定
指定日期和时间的难点在于,“!-newermt”会搜索排除指定日期和时间的文件,而“-newermt”包含指定日期和时间的则会搜索
因此,如果您想删除 2024 年 12 月 5 日之后更新的文件, 2024 年 12 月 6 日 则必须指定
而不是 `rm` `ls` 命令 命令,并执行该命令。
当系统询问“是否运行 `ls` 命令?”时,输入“y”,即可显示要删除的文件。
已找到 2024 年 12 月 6 日到 12 月 9 日之间更新的文件(file_6 到 file_9)。
[root@localhost ~]# find /var/log/test_log -type f -newermt 'Dec 6 2024' | xargs -p ls /var/log/test_log/file_6 /var/log/test_log/file_7 /var/log/test_log/file_8 /var/log/test_log/file_9?...y /var/log/test_log/file_6 /var/log/test_log/file_7 /var/log/test_log/file_8 /var/log/test_log/file_9
3. 删除文件
现在,我们来删除它。
`ls` `rm` 并执行该命令。系统会询问“是否要删除?”,y输入
[root@localhost ~]# find /var/log/test_log -type f -newermt 'Dec 6 2024' | xargs -p rm rm /var/log/test_log/file_6 /var/log/test_log/file_7 /var/log/test_log/file_8 /var/log/test_log/file_9?...y
4. 检查文件
您可以看到,2024/12/5 之后创建的文件已经消失了。
[root@localhost test_log]# ll /var/log/test_log 总计 0 -rw-r--r--. 1 root root 0 12月 1 2024 file_1 -rw-r--r--. 1 root root 0 12月 2 2024 file_2 -rw-r--r--. 1 root root 0 12月 3 2024 file_3 -rw-r--r--. 1 root root 0 12月 4 2024 file_4 -rw-r--r--. 1 root root 0 12月 5 2024 file_5
补充说明:我想更详细地说明一下。
如果我把每个步骤都写出来,篇幅会太长,所以我就到此为止吧。
最后,我想介绍一个命令,用于仅删除指定日期和时间的文件。
假设您的文件结构类似于下面的示例,并且您只想删除 12 月 3 日至 12 月 7 日的文件:
[root@localhost test_log]# ll /var/log/test_log 总计 0 -rw-r--r--. 1 root root 0 2024年12月1日 file_1 -rw-r--r--. 1 root root 0 2024年12月2日 file_2 -rw-r--r--. 1 root root 0 2024年12月3日 file_3 -rw-r--r--. 1 root root 0 2024年12月4日 file_4 -rw-r--r--. 1 root root 0 2024年12月5日 file_5 -rw-r--r--. 1 root root 0 2024年12月6日 file_6 -rw-r--r--. 1 root root 0 2024年12月7日 file_7 -rw-r--r--. 1 root root 0 2024年12月8日 file_8 -rw-r--r--. 1 root root 0 2024年12月9日 file_9
使用与之前相同的方法,您可以使用“-newermt”选项指定日期,例如:“-newermt "2024年12月3日" ! -newermt "2024年12月8日"”。这样可以更灵活地指定日期,因此可能很有用。
供您参考!
[root@localhost test_log]# find /var/log/test_log -type f -newermt "Dec 3 2024" ! -newermt "Dec 8 2024" | xargs -p rm rm /var/log/test_log/file_5 /var/log/test_log/file_3 /var/log/test_log/file_4 /var/log/test_log/file_6 /var/log/test_log/file_7?...y [root@localhost test_log]# ll /var/log/test_log total 0 -rw-r--r--. 1 root root 0 Dec 1 2024 file_1 -rw-r--r--. 1 root root 0 Dec 2 2024 file_2 -rw-r--r--. 1 root root 0 2024年12月8日 file_8 -rw-r--r--. 1 root root 0 2024年12月9日 file_9
概括
你觉得怎么样?
这次我主要学习了如何使用 find 命令删除文件,但 find 命令用途广泛,非常方便,所以我还会继续学习,争取熟练掌握它 🔥
感谢您阅读到最后!
参考网站:
什么是 find 命令?使用 Linux 命令搜索文件和目录的指南。
轻松理解 find 命令使用的 7 条规则 + 实用技巧。find
-exec 和 find | xargs 的区别。
9
