rm -r 和 rm -f 有什麼不同?

rm -r 和 rm -f 有什麼不同?

來自手冊:

  • -f,--強制

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

  • -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 allWindows 中的

以下是一些範例,它們都以以下結構開頭:

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

我預設為這些範例啟用了詳細程度和互動模式。有些發行版這樣做,而有些則不這樣做。

例子

$ 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

相關內容