回答
ls -l
命令給出了當前目前工作目錄(PWD)中所有子目錄的列表。
rm
命令可以刪除多個文件/目錄,如果您將它們作爲列表傳遞給它。
如:rm test1.txt test2.txt myApp
將刪除所有這三個文件的名稱用:
test1.txt
test2.txt
myApp
而且,您使用的rm
命令標誌在許多愚蠢是常見的。
rm -f
- 強制刪除文件沒有要求或確認
rm -r
- 遞歸處理所有子目錄,並刪除所有的內容和子目錄
所以,讓我們說你是在/ home /用戶,並且目錄結構如下所以:
/home/user
|->dir1
|->dir2
`->file1.txt
的ls -l
命令將提供包含"dir1 dir2 file1.txt"
名單,並命令ls -l | xargs rm -rf
的結果會是這樣的:
rm -rf dir1 dir2 file1.txt
如果我們用上面的例子拓展你原來的問題,獲取傳遞到系統中的最後一個命令就變成了: rm -rf di1 dir2 file1.txt bark.*
所以,一切都在當前目錄中被消滅了,所以bark.*
是多餘的(你實際上告訴機器銷燬當前目錄中的所有內容)。
我想你的意思做的是刪除當前目錄下的所有文件所有子目錄與bark.
開始要做到這一點(遞歸),你只需要做:
find -iname bark.* | xargs rm
上述手段的命令「查找此目錄和子目錄中的所有文件,忽略以」bark「字符開頭並刪除它們的大寫/小寫/ mIxEdCaSe。如果您有錯別字,這可能仍然是一個糟糕的命令,所以可以肯定的是,在進行像這樣的批量刪除之前,您應該始終進行測試。
將來,首先執行以下操作,獲取您將首先刪除的所有文件的列表,以確認它們是您要刪除的文件。
find -iname bark.* | xargs echo
然後,如果你確信,通過
find -iname bark.* | xargs rm
希望這有助於將它們刪除。
作爲一個幽默的音符,最有名的例子之一「室射頻」可以在這裏找到: https://github.com/MrMEEE/bumblebee-Old-and-abbandoned/commit/a047be85247755cdbe0acce6f1dafc8beb84f2ac
自動腳本運行像rm -rf /usr/local/.........
,但由於意外插入空格,命令成爲rm -rf /usr /local/......
,所以這實際上意味着「刪除所有以usr或本地開頭的根文件夾」,有效地銷燬使用它的任何人的系統。我對那個開發者感到不好。
您可以通過引用你的字符串,即避免這些類型的bug: rm -rf "/usr/ local/...."
會提供一個錯誤信息,避免這種錯誤,是因爲報價意味着他們之間的一切是完整路徑,而不是一個單獨的路徑列表/文件(例如:你告訴rm該文件/文件夾名稱中包含SPACE字符)。
-r
參數表示「遞歸刪除」(即,下降到子目錄中)。 -f
命令的意思是「強制」(換句話說,不要求確認)。 -rf
表示「遞歸下降到子目錄而不要求確認」
ls -l
列出目錄中的所有文件。 xargs
需要從ls -l
輸入,並將其添加到命令傳遞給xargs
是得到了執行這個樣子的最後的命令:
rm -rf bark.* <output of ls -l>
這基本上去除bark.*
和所有文件在當前目錄。故事的道德:非常小心rm -rf
。 (您可以在刪除文件之前使用rm -ri
來詢問)
rm(1)
刪除當前工作目錄中的每個文件和目錄,因爲您已經提示它。
要大致看看發生了什麼事,這條命令:
cd /etc ; ls -l | xargs echo
小心留意輸出。
我強烈建議在構建命令行時使用echo
代替rm -rf
。只有在輸出看起來不錯的情況下,你纔可以用rm -rf
重新運行命令。如有疑問,也許只需使用rm -r
,以免意外吹走太多。 rm -ir
如果你對非常感興趣對你的命令行持懷疑態度。 (我一直在使用Linux的自1994年以來,建設稍複雜的命令行的時候有選擇地刪除了一堆文件,我仍然使用這個echo
招。)
順便說一句,我會避免以任何方式解析ls(1)
輸出 - 文件名可以包含任意字符,除了ASCII NUL
和/
字符 - 包括換行符,製表符和輸出看起來像ls -l
輸出。試圖解析這與工具,如xargs(1)
可能是危險的。
相反,使用find(1)
這些東西。刪除所有文件名爲bark.*
所有目錄,我會像這樣運行命令:
find . -type d -name 'bark.*' -print0 | xargs -0 rm -r
同樣,我會使用echo
代替rm -r
對於首次執行 - 如果它看起來很好,然後我會重新運行rm -r
。
- 1. 排除Unix中沒有讀取訪問的目錄find命令
- 2. Bash命令 - 刪除目錄
- 3. Unix命令刪除目錄中的所有文件,但保留目錄
- 4. DOS命令來刪除特定目錄
- 5. 如何在unix中對指定目錄使用「head」命令?
- 6. 使用單行命令刪除目錄
- 7. 如何在windows dos命令中刪除指定的目錄
- 8. 刪除所有目錄,除了一個
- 9. 刪除unix中的特定子目錄
- 10. 用於循環目錄的SSH命令除了指定的幾個之外
- 11. 命令提示符 - 刪除具有特定姓名的目錄
- 12. 當使用`find`命令時排除指定的目錄
- 13. find命令:列表中的每個目錄和子目錄,除了git的或.hg目錄及子目錄
- 14. 檢查目錄是否存在並在一個命令中刪除unix
- 15. 目錄沒有被刪除
- 16. bash命令刪除所有,但最後5個目錄
- 17. 瞭解刪除和刪除命令
- 18. 刪除PHP中指定目錄內的所有子目錄?
- 19. Unix命令刪除重複名稱
- 20. .htaccess中除了指定的目錄
- 21. UNIX命令行的當前目錄
- 22. Unix命令來更改目錄名稱
- 23. Gridview沒有更新後刪除命令
- 24. unix命令刪除換行符爲php命令
- 25. 瞭解UNIX命令xargs
- 26. shell命令刪除空的__init__.py文件的所有目錄
- 27. 刪除unix中的奇怪目錄
- 28. 無法刪除Unix中的目錄
- 29. unix如何刪除以危險名稱命名的目錄
- 30. 定時任務 - 命令刪除所有文件的FLV每天
現在,然後我發現自己的系統上沒有找到'和-print0'配對'xargs的-0'。非常非常煩人。我認爲Solaris可能是一個這樣的殘疾人士。 – tchrist