來自手冊:
-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/file1
或example/*
)。 - 從不刪除子目錄
- 從不請求許可,基本上是
yes to all
Windows 中的
以下是一些範例,它們都以以下結構開頭:
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
(從最可能到最不可能):
- 您定義了一個 shell 別名
rm
,並將一些定義的參數(如-r
)傳遞給rm
命令 - 您正在呼叫一個名為 的腳本
rm
,該腳本還將附加參數傳遞給實際命令 - 你有一個自訂的
rm
可執行文件
您可以透過執行來驗證前兩種可能性/bin/rm -f mydir
。