這是我的目錄結構
find -type f -print0 | xargs -0 ls -t
./lisst.txt ./SAMN03272855/SRR1734376/SRR1734376_1.fastq.gz
./SAMN03272854/SRR1734375/SRR1734375_2.fastq.gz ./SAMN07605670/SRR6006890/SRR6006890_2.fastq.gz
./SAMN03272854/SRR1734375/SRR1734375_1.fastq.gz ./SAMN07605670/SRR6006890/SRR6006890_1.fastq.gz
./SAMN03272855/SRR1734376/SRR1734376_2.fastq.gz
所以這是我的檔案夾/檔案的一小部分,我有大約 70 個。
我有一個我想保留的檔案串列和其他我想洗掉的檔案。
我的 list.txt 包含SAMN03272854,SAMN03272855但我想洗掉SAMN07605670.
我跑了這個
find . ! -name 'lisst.txt' -type d -exec rm -vrf {}
它洗掉了一切
問題更新
在我的串列中,它包含我要保留的檔案夾和要洗掉的檔案夾。
要洗掉的檔案夾還包含子目錄和檔案。我想洗掉所有內容
uj5u.com熱心網友回復:
您的命令會選擇樹中的每個目錄,但有趣的名稱目錄除外lisst.txt。一旦它找到一個目錄,你就遞回地洗掉這個目錄。您的檔案不見了也就不足為奇了。
rm -r當您想避免洗掉某些檔案時,您不能使用。這意味著您也無法洗掉目錄,該目錄在其子樹下方的某個位置有您要保留的檔案。
我會運行兩個find命令:第一個洗掉所有檔案,忽略目錄,第二個洗掉所有目錄,這些目錄是空的(自下而上)。假設 SAMN03272854 確實是一個檔案(正如您在問題中告訴我們的那樣),這將是:
find . -type f \( ! \( -name SAMN03272854 -o -name SAMN03272855 \) \) -exec rm {}
find . -depth -type d -exec rmdir {} 2>/dev/null
后一個命令中的錯誤重定向會抑制來自rmdir仍包含要保留的檔案的目錄的訊息。當然,其他訊息也被抑制。我會在除錯程序中運行沒有錯誤重定向的命令,看看它是否基本正確。
如果您要保留檔案和目錄,事情會變得更加復雜,因為保留目錄可能意味著保留其下的所有檔案。在這種情況下,您可以使用-prune選項find,該選項將排除包括其子目錄在內的目錄的處理。請參閱find手冊頁,其中提供了相關示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/355074.html
上一篇:當我在uwp應用程式中使用TextBlock樣式BodyTextBlockStyle和BodyStrongTextBlockStyle時,應用程式崩潰
