如何在Linux中删除文件和目录?
基本的文件系统管理任务之一是创建、修改和删除不同类型的文件和目录。了解一些文件删除的基本工具和概念非常方便,可以节省时间。
Linux提供了几个工具,可以帮助我们完成文件删除任务。通常我们需要根据某些条件删除一批文件和目录,了解一些工具和它们的组合可以轻松完成我们的任务。
- 请谨慎使用以下命令,特别是使用正则表达式或带有find命令的一些搜索模式的命令。不正确的表达式或模式可能会删除重要的数据/系统文件或者非预期的文件。
- 始终确保重要数据和系统文件的最新备份。
- 在以Sudo或超级用户(root)身份运行此类命令之前,请谨慎操作。
使用unlink删除
不太流行。要永久删除单个文件,可以使用unlink
命令。
$ unlink {file-name}
删除单个文件
有一个更常用的命令用于删除文件,即rm
命令,它支持同时删除一个或多个文件。
$ rm {file-name}
rm
会提示您确认文件删除,以防止被写保护的文件,否则它会直接删除文件。要使rm
在删除文件之前始终提示,可以使用-i
标志:
$ rm -i {file-name}
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 d -empty -delete
For example, to delete all empty directories inside the current directory:
$ find . -type d -empty -delete
The -type d
flag ensures that only directories are matched, and the -empty
flag ensures that only empty directories are matched.
Find and remove files older than a certain number of days
To delete all files older than a certain number of days inside a given path {dir-to-search}
, you can use:
$ find {dir-to-search} -type f -mtime +{number-of-days} -delete
For example, to delete all files older than 30 days inside the current directory:
$ find . -type f -mtime +30 -delete
The -mtime +{number-of-days}
flag ensures that only files older than the specified number of days are matched.
Find and remove files with a specific file extension
To delete all files with a specific file extension inside a given path {dir-to-search}
, you can use:
$ find {dir-to-search} -type f -name "*.{file-extension}" -delete
For example, to delete all files with the .txt
file extension inside the current directory:
$ find . -type f -name "*.txt" -delete
The -name "*.{file-extension}"
flag ensures that only files with the specified file extension are matched.
Find and remove files based on a regular expression
To delete all files based on a regular expression inside a given path {dir-to-search}
, you can use:
$ find {dir-to-search} -type f -regex "{regular-expression}" -delete
For example, to delete all files with names starting with file
and ending with a number inside the current directory:
$ find . -type f -regex "./file[0-9]+$" -delete
The -regex "{regular-expression}"
flag ensures that only files matching the specified regular expression are matched.
$ 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天前或更早的所有扩展名为log的文件,可以使用:
$ 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的任何可用标志来自定义搜索。请参阅各个命令的man页面以了解更多信息。
始终在没有rm
或-delete
标志的情况下运行link_2,并分析其输出以了解哪些文件或目录将受到实际命令执行的影响。正确配置和策略的备份有助于防止意外删除以及硬件故障和link_3等情况的发生。