ZetCode

Linux rm 命令

最后修改于 2025 年 2 月 25 日

Linux 中的 rm 命令用于删除文件和目录。它是清理文件系统的强大工具,但应谨慎使用,因为已删除的文件无法轻松恢复。本教程通过实际示例介绍了 rm 的基本和高级用法。

rm 通常用于删除单个文件、多个文件,甚至整个目录。它支持各种选项来控制其行为。

删除单个文件

这会删除一个临时日志文件。

delete_file.sh
rm temp.log

rm 命令从当前目录中删除 temp.log。这是一个直接的操作,如果文件存在且您拥有写权限,则无需任何选项。除非发生错误(例如“文件未找到”),否则不会显示任何输出。与某些系统不同,这里没有回收站,文件会被永久删除。

删除多个文件

这会清除旧的备份文件。

delete_multiple_files.sh
rm backup1.tar backup2.tar backup3.tar

rm 命令一次性删除 backup1.tarbackup2.tarbackup3.tar。文件用空格分隔;它们可以是当前目录中的文件,也可以是完整路径(例如,/tmp/backup1.tar)。如果其中一个文件不存在,rm 会报告错误但会继续处理其余文件。请先使用 ls 确认目标。

删除目录

这会删除一个空的工程文件夹。

delete_directory.sh
rmdir old_project

rmdir 命令仅在 old_project 为空时删除它。它比 rm -r 更安全,因为它在存在内容时会失败,从而防止意外数据丢失。如果您收到“目录非空”的提示,请使用 ls -a old_project 检查隐藏文件,或切换到 rm -r 来删除非空目录。需要父目录的写权限。

递归删除目录

这会清除一个文件夹及其所有内容。

delete_recursive.sh
rm -r temp_files

-r(递归)选项使 rm 删除 temp_files 及其内部的所有内容——子目录、文件和隐藏项。它功能强大但有风险;没有撤销操作。请先使用 ls -R temp_files 查看内容。如果存在受保护的文件(例如,只读文件),rm 可能会提示,除非与 -f 结合使用。

强制删除

这会删除一个只读文件而不进行提示。

force_delete.sh
rm -f config.bak

-f(强制)选项告诉 rm 静默删除 config.bak,即使对于写保护的文件也会绕过提示。在脚本中或当您确定操作时非常有用。不带 -frm 可能会询问“删除写保护的文件?”。请谨慎操作——与 -r 结合使用(例如 rm -rf)可以立即擦除大量结构。请先用 ls 检查。

交互式删除

这会安全地删除日志并进行确认。

interactive_delete.sh
rm -i error.log debug.log

-i(交互式)选项会提示您确认每个文件,例如“删除 error.log?(y/n)”。键入 y 删除,键入 n 跳过。这是防止意外删除的保护措施,尤其是在使用通配符或多个文件时。对于大量文件,这可能会变得很麻烦——请改用 -I 来对每个命令进行一次提示。非常适合谨慎的清理任务。

高级:删除匹配模式的文件

这会清除目录中的所有临时文件。

delete_pattern.sh
rm *.tmp

*.tmp 通配符匹配当前目录中所有以 .tmp 结尾的文件(例如,file1.tmptemp.tmp)。 shell 会在 rm 运行之前展开模式,因此 echo *.tmp 可以预览列表。如果不存在匹配项,rm 会报错,除非使用了 -f。如果文件名包含空格,请使用引号(例如,"*.tmp")。

示例:按日期删除旧日志

这会删除早于特定日期的日志。

delete_old_logs.sh
find . -name "*.log" -mtime +30 -exec rm {} \;

这结合了 findrm 来删除 30 天以上未修改的 .log 文件。-mtime +30 按修改时间过滤,-exec rm {} \; 对每个匹配项运行 rm。请先运行 find . -name "*.log" -mtime +30 进行预览。对 rm 使用 -f(例如 rm -f)可以跳过提示。非常适合日志轮换清理。

示例:删除隐藏文件

这会删除目录中的隐藏点文件。

delete_hidden.sh
rm .*.swp

.*.swp 模式针对 Vim 等编辑器创建的隐藏交换文件(例如 .file.swp)。隐藏文件以点开头;ls -a 可以显示它们。请注意——仅使用 .* 会匹配 ...,可能导致父目录问题。使用 ls -a .*.swp 进行预览。对于清理编辑器产生的临时文件很有用。

示例:详细删除

这会删除文件并显示正在删除的内容。

verbose_delete.sh
rm -v *.bak

-v(详细)选项使 rm 打印出每个已删除的文件,例如“已删除 ‘backup.bak’”。将其应用于 *.bak,它会在删除每个 .bak 文件时列出它们。有助于审计或调试脚本。根据需要与 -r-f 结合使用(例如,rm -rv dir)。请先使用 ls *.bak 确认目标。

rm 的最佳实践

来源

GNU rm 手册

在本文中,我们探讨了使用 rm 命令删除文件和目录的各种示例,包括递归删除、强制删除和交互式删除。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出所有 Linux 教程