Linux rm 刪除指定文件外的其餘文件

1、Linux下刪除文件和文件夾經常使用命令以下:node

刪除文件: rm filelinux

刪除文件夾: rm -rf dir正則表達式

須要注意的是, rmdir 只可以刪除 空文件夾。進程

2、刪除制定文件(夾)以外的全部文件呢?test

一、方法1,比較麻煩的作法是:效率

複製須要保留的文件到其餘文件夾,而後將該目錄刪除, 而後將須要保留的移動 回來。file

mv keep ../ #保留文件(夾) keepgrep

rm -rf * #刪除當前文件夾裏的全部文件方法

mv ../keep ./ #將原來的東西移動回來移動

二、方法2,須要在當前文件夾中進行:

rm -rf !(keep) #刪除keep文件以外的全部文件

rm -rf !(keep1 | keep2) #刪除keep1和keep2文件以外的全部文件

三、方法3,當前文件夾中結合使用grep和xargs來處理文件名:

ls | grep -v keep | xargs rm #刪除keep文件以外的全部文件

說明: ls先獲得當前的全部文件和文件夾的名字, grep -v keep,進行grep正則匹配查找keep,-v參數決定告終果爲匹配以外的結果,也就是的到了keep以外的全部文件名,而後 xargs用於從 標準輸入得到參數 而且傳遞給後面的命令,這裏使用的命令是 rm,而後由rm刪除前面選擇的文件。

好處:使用了grep來正則表達式來匹配文件名字,能夠一次保留多個文件,從而進行更加準確的處理。

四、方法4,使用find命令代替ls,改進方法3從而可以處理制定文件夾的文件:

find ./test/ | grep -v keep | xargs rm #刪除當前test文件夾中keep文件以外的全部文件

說明,用grep而不用find -name選取名字,由於find選取名字時比較麻煩,對正則表達式支持不夠,沒法排除指定文件名。

五、方法5,直接使用find命令刪除其餘文件:

find ./ -name 'keep*'  -exec rm -rf {} \; #刪除keep之外的其餘文件。

find ./ -name 'keep*'  | xargs rm -rf  #刪除keep之外的其餘文件。推薦!

說明:上面第二行的代碼效率高些,緣由在於刪除多個文件時 -exec會啓動多個進程來處理,而xargs會啓動一個rm進程來處理。

關於find 執行命令的效率和借用xargs啓動的命令效率的比較,詳情請參考: http://www.linuxsir.org/main/?q=node/137

相關文章
相關標籤/搜索