刪除乙個目錄下的所有檔案但保留乙個指定檔案

2021-09-21 19:06:45 字數 1294 閱讀 8293

之前看過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"./"-execrm-rf {} \;

如果放到指令碼中執行,則可以(其中$workdir是指令碼工作目錄):

1

find-l $workdir -maxdepth 1 ! -name"$(basename $0)"! -wholename"$workdir"-execrm-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...