如何在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-1file-name-2file-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等情况的发生。

类似文章