這是我正在處理的目錄的內容:
misha@hp-laptop:~/work/c/5$ ls -l total 8 -rw-rw-r-- 1 misha misha 219 May 20 15:37 demo.c drwxrwxr-x 2 misha misha 4096 May 20 16:07 folder -rw-rw-r-- 1 misha misha 0 May 20 16:06 test
現在,我想從這個目錄中刪除文件之外的所有內容。demo.c
..下面是我想出的命令:
find . ! \( -name demo.c -o -name . \) -exec rm -Rf {} \;
它所做的和你想要做的完全一樣(意思是,文件test
和目錄folder
),但同時也會顯示以下錯誤消息:
find: `./folder': No such file or directory
因為find
認./folder
作為一個目錄,當它第一次讀取目錄時.
,在考慮它是否與find
標准或對其執行任何行動。它不知道該操作將刪除該目錄,因此在執行該操作后,它將嘗試下降到該目錄以掃描其內容。但是,當它這樣做時,目錄就不再存在了。
有多種方法來解決這個問題。還沒有提到的是使用-prune
行動。這說明find
不進入與測試匹配的目錄:
find . ! \( -name demo.c -o -name . \) -exec rm -Rf {} \; -prune