Linux 檔名包含特殊符號或是空白的檔案、目錄夾,也可搜尋出來直接刪除。
緣起,又是抓片子的時候遇到的問題之一,老手都知道片子100%的時候,目錄底下絕對不會只有avi和jpg而已,都會夾雜一些蝦密*.mht *.chm *.url *.txt之類的垃圾檔案,一個個刪除絕對是笨蛋的行為(我做了好幾年的笨蛋 = =")。
那有什麼指令可以把要刪除的檔案一次清光光呢? 這時候真的會覺得Linux真的很好用。
如果用土法煉鋼的 rm 指令保證會吐血,因為很多的檔名都不是只有英文+數字而已,有的還會夾雜其它的奇怪符號,或是最討厭的空白,這時候你就會很度濫。
那怎麼辦呢? 粉簡單,只要打一串指令就搞定!
linux@linux:/$ find -name "*.mht" -exec rm -rf {} \;
-exec 是代表搜尋完的結果交給後面執行的程式。
rm -rf 是強制刪除目錄夾(包含底下裡面的檔案)不過問。
{} 是代表搜尋結果的內容,這個可以做很多變化,例如原本 rm 指令改用 mv 就變的可以更改檔名。
\; 是代表指令結束,這個一定要加在最後,不加的話執行會錯誤。
而上面指令的"*.mht"可以更改成你要的檔案類型,如以下所示:
"*.jpg" 搜尋所有附檔名是小寫的jpg檔案並且刪除。
"*.[jJ][pP][gG]" 搜尋所有附檔名是jpg檔案,不論大小寫並且刪除。
"abc*" 搜尋abc檔名開頭的所有檔案並且刪除。
"abc*.jpg" 搜尋abc檔名開頭的jpg檔案並且刪除。
"*abc*" 搜尋檔名中間有abc的檔案並且刪除。
"*abc*.jpg" 搜尋檔名中間有abc的jpg檔案並且刪除。
以上的範例還有一個小問題,如果想要搜尋的檔名很長而且也不知道大小寫的時候,那可就麻煩了。
例如: "sdhGSDvassdrfhDDFFsklklsddD" 這種整人的檔名就很GY阿,可是真的要找到它難道要像上面寫的一樣,每個字都要入大小寫才能嗎? no no no,科技始終來自於人性,人性來自於惰性,作者早就想到了啦!!!
linux@linux:/$ find -iname "sdhGSDvassdrfhDDFFsklklsddD" -exec rm -rf {} \;
鄉親們!! 看到沒,就這麼簡單,換個參數就搞定,把原本的 -name 改成 -iname 就好囉。
以此類推,剩下的自己搞定!
沒有留言:
張貼留言