Linux / UNIX 使用 rm 命令删除文件
要在 Linux、FreeBSD、Solaris、macOS 或类 Unix 操作系统中移除或删除文件或目录,请使用 rm 命令或 unlink 命令。本页介绍如何使用命令行选项在 Linux 或类 Unix 系统上删除给定文件。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | 文件管理 |
先决条件 | rm 和 unlink 命令 |
操作系统兼容性 | BSD • Linux • macOS • Unix |
预计阅读时间 | 6 分钟 |
语法:rm 命令删除文件
rm(remove 的缩写)是 Unix/Linux 命令,用于从文件系统中删除文件。通常,在大多数文件系统上,删除文件需要对父目录具有写入权限(以及执行权限,以便首先进入目录)。删除指定文件和目录的语法如下:
其中,
$ rm {file-name}
$ rm [options] {file-name}
$ unlink {file-name}
$ rm -f -r {file-name}
- -f:强制删除文件
- -r:递归删除目录的内容
当 rm 命令仅与文件名一起使用时,rm 会删除所有给定的文件,而无需用户确认。
Unix 移除或删除文件示例
假设您有一个名为 abc.txt 的文件并且想要删除它,请键入以下命令并按下键[Enter]:
$ rm abc.txt
使用 ls 命令验证文件是否从文件系统中消失:
$ ls -l abc.txt
您将看到以下消息:
ls: cannot access 'abc.txt': No such file or directory
Linux 删除多个文件
删除三个文件foo.mp4、bar.doc、demo.txt,运行:
$ rm foo.mp4 bar.doc demo.txt
$ ls
Linux 递归删除所有文件
从目录中删除所有文件和子目录(比如 MS-DOS 世界中的deltree命令),输入:
$ rm -rf mydir
Linux 删除文件并在每次删除前提示
要在尝试删除每个文件之前请求确认,请将-i选项传递给 rm 命令:
$ rm -i filename
Gif 01:rm 命令演示
$ rm -I foo.conf bar.conf resume.doc cakeday.png
$ rm -I -r -f ~/olddata/
强制 rm 命令解释对文件执行的操作
传递-v选项如下:
$ rm -v moiz.list.txt bios-updates.doc
输出:
removed 'moiz.list.txt' removed 'bios-updates.doc'
如何删除空目录
要删除空目录,请使用 rmdir 命令而不是 rm 命令:
$ rmdir mydirectory
$ rmdir dirNameHere
$ rmdir docs
如何从文本文件中读取要删除的所有文件的列表
rm 命令通常与 xargs 结合使用,以提供要删除的文件列表。创建一个名为 file.txt 的文件:
$ cat file.txt
添加要删除的文件列表:
file1 /tmp/file2.txt ~/data.txt
现在删除名为file.txt的文件中列出的所有文件,输入:
$ xargs rm < file.txt
如何删除名为-foo.txt的文件或名为-bar 的目录?
要删除名为-foo.txt:的文件
$ rm -- -foo.txt
或
$ rm -- ./-foo.txt
要删除名为-bar:的目录
$ rm -r -f -- -bar
,两个--破折号告诉 rm 命令选项的结束,其余部分只是以破折号开头的文件或目录名称。有关更多信息,请参阅SSH Shell 命令中的 ‐‐(双破折号)是什么意思?
切勿以管理员 (root) 或普通 UNIX / Linux 用户身份运行rm -rf /
$ rm -rf /
$ rm -rf *
$ sudo rm -rf ./*
该命令rm -rf(包括rm -rf /、rm -rf *等)经常用于有关 Unix 灾难的笑话和趣闻。如果由管理员(root 用户)运行该命令的rm -rf /变体,则会导致计算机上每个可写的已安装文件系统的内容被删除。请勿尝试这些命令。
在 rm 命令中使用通配符(globbing)
通配符只不过是用于匹配未知字符或字符集的符号。例如,星号 ( *) 和问号 ( ?) 就是通配符的示例。很久以前,在 UNIX V6 中,有一个程序 /etc/glob 可以扩展通配符模式。不久之后,它成为了 shell 的内置程序。因此,我们可以使用通配符匹配批量删除文件。
假设我可以输入以下 rm 命令。它将删除以字符开头的所有文件,例如 abc.txt aaa.doc amazing_pic.jpg 等:
$ rm a*
想要删除所有以 .pl 扩展名的文件吗?试试看
$ rm *.pl
星号 ( *) 代表任意数量的未知字符,非常强大。另一方面,问号 ( ?) 仅代表一个未知字符。例如,要删除所有文件模式,例如 aa、ab、ac 等,您可以输入:
$ rm a?
如果您使用通配符删除了多个文件,则可以使用“ df ”或“du 命令”检查 Linux 系统上的可用磁盘空间量:
$ df -h
$ df -h /home/
$ du -csh /path/to/dir/
ls *.txt
然后,如果您看到所需的输出或要删除的文件,请运行:
rm *.txt
结论
您学习了如何在 Linux 和类 Unix 操作系统上删除文件。以下是 GNU rm 命令的所有重要选项(请在此处阅读手册页)
选项 | 描述 |
---|---|
-f | 忽略不存在的文件和参数,从不提示 |
-i | 每次删除文件前提示 |
-I | 在删除三个以上文件之前或 递归删除时提示一次;比 -i 更少干扰,同时仍然可以防止 大多数错误 --interactive[=WHEN] 根据 WHEN 提示:从不、一次(-I)或 总是(-i);如果没有 WHEN,则总是提示 |
--one-file-system | 递归删除层次结构时,跳过与
相应命令行参数 不同的文件系统上的任何目录 |
--no-preserve-root | 不要特殊对待'/' |
--preserve-root[=all] | 不删除“/”(默认); 使用“all”,拒绝与其父级不同的设备上的任何命令行参数 |
-r | 递归删除目录及其内容 |
-R | 与上相同 |
-d | 删除空目录 |
-v | 解释正在做什么 |
$ man rm
$ man 7 glob
$ man 3 glob
参见:
- 如何在 Linux 上安全删除文件
- 使用一个 Linux 命令即时查找和删除文件
- UNIX:删除名称以 - (破折号)字符开头的文件
- Python:删除/移除文件
- Linux / Unix rsync:传输后删除源文件
- 如何在 Linux 或 Unix 上删除文件名中包含字符或数字的文件
- 如何:Linux / UNIX 删除或移除具有 Inode 号的文件
- 如何在 Linux 中强制删除目录?
- Linux 和类 Unix 系统没有终端的撤销命令。这意味着一旦删除文件,它就永远消失了。因此,输入命令时必须小心。某些图形用户界面 (GUI) 提供垃圾功能,允许您恢复已删除的文件。但是,此功能仅适用于从 GUI 中删除的文件,而不适用于从终端中删除的文件。您应该始终保留经过验证的备份,以防止意外删除重要文件。这样,如果您确实故意或意外删除了文件,您可以从备份中恢复它。