之前看過oldboy(老男孩)前輩的一篇文章《linux面試題:刪除乙個目錄下的所有檔案,但保留乙個指定檔案》,近日終於有機會得以驗證,但與老男孩前輩的文章中具體講的有些不太一樣,故而專門寫一篇文章重新整理這個問題。雖然是同乙個話題,和同一種思路,但細節上有一定的差別。
需求:
刪除乙個目錄下的所有檔案,但保留乙個指定檔案。
場景與要求:
目錄下有目錄和檔案,目錄下有子目錄和子檔案(這是通常的場景)
目錄下有符號鏈結檔案、隱藏檔案等
如果是當前目錄,則需要排除當前目錄
執行成功則返回**0,並且不提示任何警告和錯誤
解決辦法:
例如刪除當前目錄下的所有檔案,除了deploy.sh(原始場景:deploy.sh完成部署工作,但不需要此專案時,執行destroy函式,刪除當前目錄下的所有檔案,除了deploy.s**件本身)
簡單驗證,可以如此執行:
1
find
-l ./ -maxdepth 1 ! -name
"deploy.sh"
! -wholename
"./"
如果是真的要刪除,則是(也是此文主要想表達的方式): 1
find
-l ./ -maxdepth 1 ! -name
"deploy.sh"
! -wholename
"./"
-
exec
rm
-rf {} \;
如果放到指令碼中執行,則可以(其中$workdir是指令碼工作目錄):
1
find
-l $workdir -maxdepth 1 ! -name
"$(basename $0)"
! -wholename
"$workdir"
-
exec
rm
-rf {} \;
原理或解釋:
主要是利用find命令結合rm命令,
tag:find和rm刪除,find刪除檔案,find符號鏈結檔案,find maxdepth用途,find刪除
--end--
刪除乙個目錄下的所有檔案,但保留乙個指定文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 面試題 刪除乙個目錄下的所有檔案,但...
C 刪除乙個檔案目錄下的所有檔案以及目錄
bool doremovedirectory cstring chrdirname bool releasedirectory cstring chrdirname end of civmsvrinfo releasedirectory bool doremovedirectory cstring ...
VC 刪除乙個檔案目錄下的所有檔案以及目錄
1 bool doremovedirectory cstring chrdirname 23 bool releasedirectory cstring chrdirname 4 end of civmsvrinfo releasedirectory 1415 bool doremovedirect...