rm -r 和 rm -f 有什么区别?

rm -r 和 rm -f 有什么区别?

来自手册:

  • -f,--force

    忽略不存在的文件,从不提示

  • -r、-R、——递归

    递归删除目录的内容

虽然此选项描述不同,但当尝试删除一个空文件夹(此示例中没有 rmdir)时,它会产生相同的结果。

-f与之相比,不会打印错误或任何内容-r,这是唯一的区别吗?或者是否存在特定类型的情况,即一个选项比另一个选项更好,或者其中一个选项根本不起作用而另一个选项起作用的情况?

答案1

CentOS 的手册页是这样说的:

-f, --force
    ignore nonexistent files, never prompt

-r, -R, --recursive
    remove directories and their contents recursively

据我所知(感谢下面的一些评论),以下内容对于-r-f标志是正确的:

-r

  • 递归删除目录的内容,包括隐藏文件和子目录
  • 根据您的配置,它可能会请求权限(例如,使用标志时--interactive)。一些发行版默认执行此操作。
  • 可用于删除目录,如果要这样做,只需给它目录的路径(例如/path/to/directory:)

-F

  • 不会递归删除目录的内容,仅删除与给定路径直接匹配的文件(例如example/file1example/*)。
  • 永不删除子目录
  • 从不请求许可,基本上yes to all在 Windows 中

下面是一些示例,它们均以以下结构开头:

example/
  file1
  file2
  file3
  .file
  dir/
    file1
    file2
    file3
    .file

我默认为这些示例启用了详细程度和交互模式。有些发行版这样做,而有些则不这样做。

rm 示例

$ rm example
rm: cannot remove `example': Is a directory

如您所见,rm默认情况下不会删除目录。

rm 示例 -f

$ rm example -f
rm: cannot remove `example': Is a directory

使用该-f标志仍然不允许它删除目录。

rm 示例 -r

$ rm example -r
rm: descend into directory `example'? yes
rm: remove regular empty file `example/file3'? yes
  removed `example/file3'
rm: remove regular empty file `example/file2'? yes
  removed `example/file2'
rm: descend into directory `example/dir'? yes
rm: remove regular empty file `example/dir/.file'? yes
  removed `example/dir/.file'
rm: remove regular empty file `example/dir/file3'? yes
  removed `example/dir/file3'
rm: remove regular empty file `example/dir/file2'? yes
  removed `example/dir/file2'
rm: remove regular empty file `example/dir/file1'? yes
  removed `example/dir/file1'
rm: remove directory `example/dir'? yes
  removed directory: `example/dir'
rm: remove regular empty file `example/file1'? yes
  removed `example/file1'
rm: remove directory `example'? yes
  removed directory: `example'

如您所见,系统会要求您提供每个文件和目录的权限,隐藏文件也会被删除。

rm 示例/* -f

$ rm example/* -f
rm: cannot remove `example/dir': Is a directory
removed `example/file1'
removed `example/file2'
removed `example/file3'

在这里,您不需要获得许可,目录不会被删除,也不会有隐藏文件。

rm 示例/* -r

$ rm example/* -r
rm: descend into directory `example/dir'? yes
rm: remove regular empty file `example/dir/.file'? yes
  removed `example/dir/.file'
rm: remove regular empty file `example/dir/file3'? yes
  removed `example/dir/file3'
rm: remove regular empty file `example/dir/file2'? yes
  removed `example/dir/file2'
rm: remove regular empty file `example/dir/file1'? yes
  removed `example/dir/file1'
rm: remove directory `example/dir'? yes
  removed directory: `example/dir'
rm: remove regular empty file `example/.file'? yes
  removed `example/file'
rm: remove regular empty file `example/file1'? yes
  removed `example/file1'
rm: remove regular empty file `example/file2'? yes
  removed `example/file2'
rm: remove regular empty file `example/file3'? yes
  removed `example/file3'

这里,示例目录的内容(而不是目录本身)被删除,包括隐藏文件。

答案2

rm -r mydir将删除mydir目录及其所有内容。

rm -f mydir不会删除目录(无论是空的还是有内容的)。它会报告一个错误:

  • 在 BSD/OS X 上:

    rm: mydir/: is a directory
    
  • 在 GNU/Linux 上:

    rm: cannot remove 'mydir': Is a directory
    

无论给定什么参数,命令行为的可能解释rm(从最可能到最不可能):

  1. 你有一个定义的 shell 别名rm,它将一些定义的参数(如-r)传递给rm命令
  2. 您正在调用一个名为的脚本rm,该脚本还会将其他参数传递给实际命令
  3. 你有一个自定义的rm可执行文件

您可以通过执行来验证前两种可能性/bin/rm -f mydir

相关内容