Linux / 命令 / rm / 删除文件或目录的命令
Linux 中的 rm 命令用于删除文件,使用 -r 选项还可以删除目录及其内容。由于它通常不会经过回收站,请在执行命令前务必检查路径和要删除的项目。
删除前需要检查的事项
本文基于 GNU coreutils 的 rm 和 Bash shell。使用 rm 删除的文件可能很难通过常规方法恢复。请单独备份重要文件,并先通过 pwd 和 ls -la 检查当前位置和目标。
rm 并不会每次都显示确认信息。默认行为取决于文件的写入权限、输入是否来自终端等,shell 中的别名设置也可能影响它。要明确确认每个文件,请使用 -i。有关详细条件,请参阅 GNU rm 手册。
删除文件
下面是创建一个新的练习目录并准备在其中删除文件的示例。如果当前路径下已经存在rm-practice,请使用其他空位置,如果第一个命令失败,则不要继续执行。
mkdir rm-practice
cd rm-practice
printf 'practice\n' > sample.txt
ls
确认sample.txt已显示后,执行以下命令。在确认消息中,输入y以删除,或者如果不想删除则输入n。
rm -i sample.txt
ls
如果您批准删除,sample.txt将不再出现在ls的结果中。rm sample.txt可以在不确认的情况下删除文件,因此不要认为确认消息总是会出现。
删除目录
要仅删除空目录,可以使用 rmdir。如果目录不为空,通常会失败。
mkdir empty-dir
rmdir empty-dir
要删除带有内容的目录,请使用 -r。下面的命令创建练习目录和文件,进行验证,然后删除它们。配合使用 -i 会对每个项目进行确认。
mkdir example-dir
printf 'practice\n' > example-dir/file.txt
ls -la example-dir
rm -ri example-dir
确认信息可能会询问是否进入目录以及删除文件和目录。在回答每个问题之前,请核对名称,并仅批准您打算删除的项目。拒绝某些问题可能导致目录保留或显示错误。
通配符和隐藏文件
像 *.txt 这样的模式会在 rm 执行之前被 shell 展开为匹配的名称。在一次性删除多个文件之前,先使用如下命令检查匹配的名称,而不是直接使用删除命令。
printf '%s\n' ./*.txt
在确认输出的名称是目标文件后,仅在必要时使用 rm -i ./*.txt。如果没有匹配的文件,该模式可能会按原样显示,或者命令行为可能会根据 Bash 的设置而变化。将整个模式用引号括起来可以防止常规的文件名扩展。
在默认的 Bash 设置中,* 不包括以点开头的隐藏项目,但这可能因 dotglob 等设置而异。像 rm -rf * 这样的命令如果在不检查的情况下批量删除,如果对当前位置和展开结果判断错误,可能会造成严重损害。每种设置的差异可以在 Bash 文件名扩展文档 中查看。
常用选项和路径
-i: 确认要删除的每个项目。被拒绝的项目将不会被删除。-r: 递归删除目录内的内容。-f: 忽略不存在的目标,并且不显示确认消息。此选项无法解决权限错误。-v: 输出已删除的项目以帮助验证结果。
带有空格的路径应使用引号括起来,如 rm -i "my file.txt"。如果文件名以连字符开头,请像 rm -i -- -draft.txt 一样在 -- 之后指定它,以防止其被解释为选项。
如果出现权限错误,请检查您是否在目标的父目录中拥有必要的权限,并咨询管理员。是否可以删除并不仅取决于文件本身的写权限。删除后,请再次检查目录列表,如果您删除了所需的文件,请立即停止操作,并检查生产环境的备份或恢复程序。




