91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

刪除一個目錄下的所有文件但保留一個指定文件

發布時間:2020-06-22 12:49:35 來源:網絡 閱讀:3240 作者:urey_pp 欄目:開發技術

之前看過oldboy(老男孩)前輩的一篇文章《linux面試題:刪除一個目錄下的所有文件,但保留一個指定文件》,近日終于有機會得以驗證,但與老男孩前輩的文章中具體講的有些不太一樣,故而專門寫一篇文章重新整理這個問題。雖然是同一個話題,和同一種思路,但細節上有一定的差別。

需求:

刪除一個目錄下的所有文件,但保留一個指定文件。

場景與要求:

  1. 目錄下有目錄和文件,目錄下有子目錄和子文件(這是通常的場景)

  2. 目錄下有符號鏈接文件、隱藏文件等

  3. 如果是當前目錄,則需要排除當前目錄

  4. 執行成功則返回代碼0,并且不提示任何警告和錯誤

解決辦法:

例如刪除當前目錄下的所有文件,除了deploy.sh(原始場景:deploy.sh完成部署工作,但不需要此項目時,執行destroy函數,刪除當前目錄下的所有文件,除了deploy.sh文件本身)

簡單驗證,可以如此執行:

find -L ./ -maxdepth 1 ! -name "deploy.sh" ! -wholename "./"

如果是真的要刪除,則是(也是此文主要想表達的方式):

find -L ./ -maxdepth 1 ! -name "deploy.sh" ! -wholename "./" -exec rm -rf {} \;

如果放到腳本中執行,則可以(其中$WORKDIR是腳本工作目錄):

find -L $WORKDIR -maxdepth 1 ! -name "$(basename $0)" ! -wholename "$WORKDIR"  -exec rm -rf {} \;

原理或解釋:

主要是利用find命令結合rm命令,

  • -L 表示find時包含符號鏈接文件

  • -maxdepth 1 表示查找目錄深度為1,也就是只處理目錄下的目錄和文件,其他的目錄中的文件或目錄一概不做處理,如果不指定此參數,很有可能遭遇“No such file or directory”問題,原因是,find出來的內容是無法經過排序的,有時會造成父目錄已經被rm刪除,子目錄的路徑信息還會傳遞給rm,造成rm無法找到文件或目錄,從而報錯。

  • ! -name "$(basename $0)"  表示不包含當前腳本名字的文件

  • ! -wholename "$WORKDIR"  表示不包含腳本或命令所在的當前工作目錄,之所以用-wholename而不是-name是因為兼容某些Unix系統,如果僅用-name會得到一條警告“find: warning: Unix filenames usually don't contain slashes (though pathnames do).  That means that '-name `./deploy.sh'' will probably evaluate to false all the time on this system.  You might find the '-wholename' test more useful, or perhaps '-samefile'.  Alternatively, if you are using GNU grep, you could use 'find ... -print0 | grep -FzZ `./deploy.sh''.”。


tag:find和rm刪除,find刪除文件,find符號鏈接文件,find maxdepth用途,find刪除

--end--

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙陵县| 洞口县| 南木林县| 巧家县| 波密县| 丹寨县| 和平区| 永平县| 开平市| 呼伦贝尔市| 武山县| 左云县| 温宿县| 双城市| 醴陵市| 石柱| 淮北市| 晴隆县| 苏尼特左旗| 沐川县| 湖州市| 三门峡市| 德江县| 瓮安县| 武定县| 德昌县| 观塘区| 宜川县| 冷水江市| 从江县| 光泽县| 福州市| 新泰市| 文安县| 洛浦县| 金阳县| 利辛县| 禄劝| 泸水县| 磐石市| 遵义市|