文件系统管理的基本任务之一是创建、修改和删除各类文件和目录。了解文件删除的一些基本工具和概念会很有帮助并节省您的时间。
Linux 提供了多种工具来帮助您执行文件删除任务。通常,您不仅需要删除单个文件或目录,还需要根据某些条件删除许多文件和目录。为了轻松完成任务,了解一些常用命令及其组合会很有帮助。
- 请谨慎使用以下命令,尤其是那些使用正则表达式或某些带有 find 命令的搜索模式的命令。使用错误的公式或模式可能会导致关键数据/系统文件或意外文件的删除。
- 始终拥有重要数据和系统文件的最新备份。
- 运行此类命令之前请务必小心,尤其是当您以 sudo 或超级用户 (root) 身份运行它们时。
使用取消链接删除
它不是那么受欢迎。要永久删除单个文件,请使用unlink命令。
$ unlink {file-name} 
删除单个文件
删除文件有一个比较常用的命令,即rm命令,它支持同时删除一个或多个文件。
$ rm {file-name} rm提示您确认删除写保护文件,否则直接删除文件。要让rm在删除文件之前始终提示,请使用-i标志。
$ rm -i {file-name} rm命令删除时不会在屏幕上显示任何消息。要列出rm命令实际执行的操作,请使用 rm 和-v标志。
$ rm -v {file-name}要删除写保护的文件而不提示确认,请使用-f标志。
$ rm -f {file-name} 
删除多个文件
您可以通过指定多个文件名作为rm的参数来删除多个文件。
$ rm {file-name-1} {file-name-2} {file-name-3} ... {file-name-N}还支持rm正则表达式。如果要删除所有名为file-name-*的文件,可以使用以下命令:
$ rm file-name-*您还可以使用正则表达式指定多个文件。如果你想删除三个匹配file-name-1 、 file-name-2 、 file-name-3的文件,你可以使用如下命令:
$ rm file-name-[123] 
删除目录
可以使用带有-d选项的rm命令删除空目录。
$ rm -d {dir-name}支持文件删除的选项也可以使用-d标志与目录删除结合起来。例如:
$ rm -idv {dir-name}使用-r标志删除非空目录。
$ rm -r {dir-name}如果您不想在删除目录及其内容之前收到提示,请使用-rf标志。这将删除目录中的所有内容,包括目录本身,而无需确认。作为 root 使用时要特别小心。
$ rm -rf {dir-name} 
搜索和删除文件
对于更复杂的要求,您可以使用带有各种选项的 find 命令。删除{dir-to-search}指定路径中与模式{pattern}匹配的所有文件
$ find {dir-to-search} -type f -name {pattern} -exec rm -f {} \;例子:
$ find /var/tmp -type f -name "*.tmp" -exec rm -f {} \;如果要删除与模式{pattern}匹配的所有内容(包括{dir-to-search}中的目录),请稍微修改上述命令,如下所示:
$ find {dir-to-search} -name {pattern} -exec rm -rf {} \;最新版本的 find 命令内部支持删除功能。这里, -delete标志取代了 rm 命令,但-depth告诉 find 命令先处理目录内容,然后再处理目录本身。
$ find {dir-to-search} -type f -name {file-name-pattern} -depth -delete上面的示例在处理大量文件时效率更高,因为它不会为每个匹配的文件的rm命令生成新的外部进程。但是,并非所有版本的find命令(尚)都支持-delete标志。相反,您可以选择将xargs命令与find结合使用,如下例所示。
$ find {dir-to-search} -type f -name {pattern} -print0 | xargs -0 rm或者在 exec 命令中使用+终止符来连接 find 命令找到的所有内容,例如 xargs。
$ find {dir-to-search} -name {pattern} -exec rm -rf {} +默认情况下,find 命令使用-print标志,但您通常会忽略写入此标志。使用xargs时,必须避免每个文件名之间new-line 。因此-print0标志告诉 find 在找到的每个文件名后打印一个null字符。
同样,在xargs中指定-0标志,以便组合两个命令。这里的rm命令删除通过管道查找find传递的文件。例如,以下命令搜索并删除当前用户主目录(用~符号指定)中的所有*.tmp文件。
$ find ~ -name "*.tmp" -print0 | xargs -0 rm find命令提供了多种搜索文件和目录的方法,包括所有权、权限、时间戳等。我们将讨论几种可以帮助您完成特定文件删除任务的方法。
用户可以查找和删除文件
要删除特定user拥有的特定目录中的所有内容,请使用:
$ find {dir-to-search} -mindepth 1 -user {user-name} -delete在上面的示例中,如果{dir-to-search}指定的目录与搜索模式和条件匹配,则值为 1 的-mindepth标志可防止删除该目录。或者要删除指定目录中属于特定group的所有内容,请使用:
$ find {dir-to-search} -mindepth 1 -group {group-name} -delete如果您不想遍历搜索路径下的子目录,还可以选择使用-maxdepth和适当的目录深度值。
执行示例如下所示。
$ find tempdir/ -mindepth 1 -maxdepth 1 -user abhisheknair -group abhisheknair -delete如果你想指定user-id和group-id ,你可以尝试这样的操作:
$ find {dir-to-search} -mindepth 1 -uid {user-id} -gid {group-id} -delete查找并删除空目录
要删除指定路径{dir-to-search}内的所有空目录,您可以使用:
$ find {dir-to-search} -type d -empty -delete相反,要删除指定路径{dir-to-search}中的所有空文件,请使用:
$ find {dir-to-search} -type f -empty -delete查找并删除早于 X 的文件
在某些情况下,您可能需要删除超过x天的文件。 find 具有读取文件的创建时间 ( ctime )、访问时间 ( atime ) 和修改时间 ( mtime ) 的选项。您可以将 find 与mtime选项结合使用来查找并删除超过x天前修改的文件。
$ find {dir-to-search} -type f -mtime +{X} -delete例如,要删除/var/tmp中所有修改时间超过 30 天且具有日志扩展名的文件,可以使用以下命令:
$ find /var/tmp -name "*.log" -type f -mtime +30 -delete根据权限查找和删除文件
现在您还可以根据特定权限删除文件,例如:
$ find {dir-to-search} -name {pattern} -perm {NNN} -delete例子:
$ find /var/tmp -name "temp*" -perm 755 -delete或者,如果您想使用符号格式的权限,请使用:
$ find {dir-to-search} -name {pattern} -perm u={rwx},g={rwx},o={rwx} -delete例子:
$ find /var/tmp -name "temp*" -perm u=rwx,g=rw,o=rw -delete概括
Linux 提供了unlink 、 rm和rmdir命令,这些命令简单且易于使用正则表达式进行扩展。对于更高级的需求,您可以选择使用find和xargs等工具的组合来完成您想要的任务。除了本文中的示例之外,您还可以选择使用带有可用标志的 find 来自定义搜索。有关详细信息,请参阅每个命令的手册页。
始终运行不带rm或-delete标志的 find 命令,并分析其输出以查看哪些文件或目录受到运行实际命令的影响。拥有良好的备份配置和策略不仅可以在意外删除的情况下为您提供帮助,而且可以在发生硬件故障或网络攻击时为您提供帮助。




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

