在Linux終端中,如何刪除除一個或兩個文件夾以外的所有文件?在Linux終端中,如何刪除一個或兩個目錄以外的所有文件
例如。
我有一個目錄圖像文件和一個.txt
文件。 我想刪除除.txt
文件以外的所有文件。
在Linux終端中,如何刪除除一個或兩個文件夾以外的所有文件?在Linux終端中,如何刪除一個或兩個目錄以外的所有文件
例如。
我有一個目錄圖像文件和一個.txt
文件。 我想刪除除.txt
文件以外的所有文件。
從目錄中,列出文件,過濾掉所有不包含'文件保留',並刪除列表中剩下的所有文件。
ls | grep -v 'file-to-keep' | xargs rm
爲了避免問題的文件名中使用空格(記住永遠不要使用文件名中的空格),使用find
和-0
選項。
find 'path' -maxdepth 1 -not -name 'file-to-keep' -print0 | xargs -0 rm
或混合兩種,使用grep
選項-z
從find
管理-print0
名稱一般情況下,使用使用grep倒置模式搜索應該做的工作。當你沒有定義任何的圖案,我只是給你一個一般的代碼示例:
ls -1 | grep -v 'name_of_file_to_keep.txt' | xargs rm -f
的ls -1
列出每行一個文件,這樣的grep可以通過網上搜索線。 grep -v
是倒立的旗幟。所以任何匹配的模式都不會被刪除。
對於多個文件,你可以使用egrep的:問題後
ls -1 | grep -E -v 'not_file1.txt|not_file2.txt' | xargs rm -f
更新進行了更新: 我假設你願意刪除除在當前文件夾中的文件不與.txt
結尾的所有文件。所以這應該工作太:
find . -maxdepth 1 -type f -not -name "*.txt" -exec rm -f {} \;
史詩。乾淨的答案。謝謝。 – moeiscool
使用not
修改刪除file(s)
或pattern(s)
你不想刪除,你可以修改1
傳遞給-maxdepth
指定要多少子目錄深刪除文件從
find . -maxdepth 1 -not -name "*.txt" -exec rm -f {} \;
你也可以這樣做:
find -maxdepth 1 \! -name "*.txt" -exec rm -f {} \;
發現支持-delete
選項,所以你不需要-exec
。您也可以通過多套-not -name somefile -not -name otherfile
[email protected]$ ls
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt josh.pdf keepme
[email protected]$ find . -maxdepth 1 -type f -not -name keepme -not -name 8.txt -delete
[email protected]$ ls
8.txt keepme
在bash中,你可以使用:
$ shopt -s extglob # Enable extended pattern matching features
$ rm !(*.txt) # Delete all files except .txt files
除了其中一個還是兩個? –
您最好展示一些例外應該如何的模式。否則,我們將只能給出一個非常一般的答案。 – fedorqui
已更新的問題 – Bilal