如何在Linux终端中删除文件和目录

rm和nrmdir命令删除Linux、MacOS和其他类Unix操作系统上的文件和目录。它们类似于Windows和DOS中的del和Deltree命令。这些命令非常强大,并且有相当多的选项。

请务必注意,使用rm和rmdir删除的文件和目录不会移至垃圾桶。它们会立即从您的计算机中删除。如果您不小心使用这些命令删除了文件,则您能够还原它们的唯一方法是从备份。

如何使用RM删除文件

最简单的情况是删除当前目录中的单个文件。键入rm命令、空格,然后键入要删除的文件的名称。

rm file_1.txt

如果文件不在当前工作目录中,请提供文件位置的路径。

rm ./path/to/the/file/file_1.txt

您可以向rm传递多个文件名。这样做会删除所有指定的文件。

rm file_2.txt file_3.txt

通配符可用于选择要删除的文件组。*代表多个字符,而?表示单个字符。此命令将删除当前工作目录中的所有PNG图像文件。

rm *.png

此命令将删除具有单字符扩展名的所有文件。例如,这将删除File.1和File2,但不会删除File.12。

rm *.?

如果文件是写保护的,则在删除该文件之前将提示您。您必须用y或n回答,然后按“Enter”。

要降低将RM与通配符一起使用的风险,请使用-i(交互式)选项。这需要您确认删除每个文件。

rm -i *.dat

-f选项(Force)与交互式相反。即使文件是写保护的,也不会提示确认。

rm -f filename

如何使用RM删除目录

要删除空目录,请使用-d选项(目录)。您可以使用通配符(*和?)。在目录名中,就像您可以使用文件名一样。

rm -d directory

提供多个目录名将删除所有指定的空目录。

rm -d directory1 directory2 /path/to/directory3

要删除非空目录,请使用-r(递归)选项。需要明确的是,这会删除目录以及其中包含的所有文件和子目录。

rm -r directory1 directory2 directory3

如果目录或文件受写保护,系统将提示您确认删除。要删除非空目录并取消这些提示,请同时使用-r(递归)和-f(强制)选项。

rm -rf directory

这里需要小心。使用rm-rf命令出错可能会导致数据丢失或系统故障。这很危险,谨慎是最好的政策。要了解rm-rf命令将删除的目录结构和文件,请使用tree命令。

如果您使用的是Ubuntu或其他基于Debian的发行版,请使用aapt-get命令将此软件包安装到您的系统上。在其他Linux发行版上,请改用您的Linux发行版的包管理工具。

sudo apt-get install tree

运行tree命令会生成一个简单易懂的目录结构图,以及运行该命令的目录下的文件。

tree

您还可以提供tree命令的路径,使其从文件系统中的另一个目录启动树。

tree path/to/directory

rm命令还具有--one-file-system、--no-preserve-root和--preserve-root选项,但这些选项仅建议高级用户使用。如果出现错误,可能会意外删除所有系统文件。有关详细信息,请参阅该命令的高级手册页面。

如何使用rmdir删除目录

还有另一个名为rmdir的命令,您可以使用该命令删除目录。rm和rmdir之间的区别在于,rmdir只能删除空的目录。它永远不会删除文件。

最简单的情况是删除单个空目录。与RM一样,您可以将多个目录名传递给rmdir,或者传递一个目录的路径。

通过将当前目录的名称传递给rmdir来删除当前目录中的单个目录:

rmdir directory

通过将名称列表传递给rmdir来删除多个目录:

rmdir directory1 directory2 directory3

通过指定不在当前目录中的目录的完整路径来删除该目录:

rmdir /path/to/directory

如果您尝试删除非空文件夹,rmdir将给您一条错误消息。在下面的示例中,rmdir成功地以静默方式删除了客户端目录,但它拒绝删除项目目录,因为它包含文件。项目目录保持不变,其中的文件保持不变。

当rmdir给出“Directory not Empty”错误时,它会停止处理通过命令行传递给它的目录。如果您要求rmdir删除四个目录,并且第一个目录中有文件,rmdir会给出错误消息,不做任何其他操作。您可以使用--Ignore-Fail-on-non-Empty选项强制它忽略这些错误,以便处理其他目录。

在以下示例中,已将两个文件夹传递给rmdir,它们是Work/Reports和Work/Quotes。命令中已包含--Ignore-Fail-on-non-Empty选项。Work/Reports文件夹中有文件,因此rmdir无法将其删除。Ignore-Fail-on-non-Empty选项强制rmdir忽略错误并移动到它需要处理的下一个文件夹,即Work/Quotes。这是一个空文件夹,rmdir会将其删除。

这就是使用的命令。

rmdir --ignore-fail-on-non-empty work/reports /work/quotes

您可以使用-p目录(父目录)选项删除目录,也可以删除其父目录。此技巧之所以有效,是因为rmdir从目标目录开始,然后后退到父目录。该目录现在应该是空的,因此可以通过rmdir将其删除,并且该过程会重复返回提供给rmdir的路径。

在以下示例中,传递给rmdir的命令为:

rmdir -p work/invoices

应要求删除发票和工作目录。

无论您使用的是Bash还是任何其他shell,Linux都为您提供了灵活而强大的命令,让您可以直接从终端命令行删除目录和文件。有些人更喜欢以终端为中心的工作流程。其他人在这件事上可能别无选择。他们可能在没有安装GUI的服务器上工作,或者在无头系统(如Raspberry PI)上的远程会话上工作。这些命令非常适合这群人。

但是,无论您喜欢哪种类型的工作流,这些命令都非常适合包含在shell脚本中。如果脚本由cron作业触发,它可以帮助自动执行日常内务任务,如清除不需要的日志文件。如果您调查该使用案例,请记住这些命令的功能,仔细测试所有内容,并始终保持最新备份。

相关文章