日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

find命令过滤 no such_linux find -exec rm -r 报No such file or directory

發(fā)布時間:2023/12/31 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 find命令过滤 no such_linux find -exec rm -r 报No such file or directory 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

linux find -exec rm -r 報: No such file or directory

系統(tǒng)環(huán)境Ubuntu 16.04.3 LTS

在寫批量制作docker鏡像腳本時,先是將代碼目錄拷貝到對應的制作鏡像的目錄中,然后遍歷鏡像目錄執(zhí)行build,制作鏡像,鏡像build完成之后,再將代碼目錄刪除,刪除代碼目錄時用到find -exec組合命令,但是卻報了:

No such file or directory

場景模擬:

zzfdeMacBook-Air:temp zzf$ mkdir testaaa

zzfdeMacBook-Air:temp zzf$ ls | grep testaaa

testaaa

zzfdeMacBook-Air:temp zzf$ find . -type d -name "testaaa" -exec rm -r {} \;

find: ./testaaa: No such file or directory

再次查找testaaa目錄,發(fā)現(xiàn)testaaa目錄確實被刪除了。但為什么會報: No such file or directory呢?

zzfdeMacBook-Air:temp zzf$ ls testaaa

ls: testaaa: No such file or directory

查閱了find的資料后發(fā)現(xiàn),find 默認是遞歸查找,在執(zhí)行上面的刪除目錄的組合命令時, 它會遍歷testaaa目錄, 實際執(zhí)行過程如下:

查詢當前目錄下的所有目錄

進行模式匹配"testaaa", 匹配成功? 成功。

執(zhí)行exec后的命令: rm -r testaaa

find 嘗試進入到testaaa/目錄中,查找目錄或文件,并執(zhí)行exec后面的命令

find 沒有找到testaaa目錄,返回ENOENT(No such file or directory)

解決方法有很多種,下面只列出常用方式:

1. 使用find的 -maxdepth OPTIONS:

-maxdepth levels:指定tests和actions作用的最大目錄深度,只能為非負整數(shù)。可以簡單理解為目錄搜索深度,但并非如此。當前path目錄的層次為1,所以若指定-maxdepth 0將得不到任何結(jié)果。

zzfdeMacBook-Air:temp zzf$ ls -d testaaa

testaaa

zzfdeMacBook-Air:temp zzf$

zzfdeMacBook-Air:temp zzf$ find . -maxdepth 1 -type d -name "testaaa" -exec rm -r {} \;

zzfdeMacBook-Air:temp zzf$ echo $?

0

zzfdeMacBook-Air:temp zzf$ ls -d testaaa

ls: testaaa: No such file or directory

2. 使用find的 -prune ACTIONS:

-prune: 不進入目錄(告訴find,不要在要刪除的目錄中查找子目錄或文件),所以可用于忽略目錄,但不會忽略普通文件。沒有給定-depth時,總是返回true,如果給定-depth,則直接返回false,所以-delete(隱含了-depth)是不能和-prune一起使用的

zzfdeMacBook-Air:temp zzf$ ls -d testaaa

testaaa

zzfdeMacBook-Air:temp zzf$ find . -type d -name "testaaa" -prune -exec rm -r {} \;

zzfdeMacBook-Air:temp zzf$ echo $?

0

zzfdeMacBook-Air:temp zzf$ ls -d testaaa

ls: testaaa: No such file or directory

3. 使用find的 -delete ACTIONS:

-delete,它隱含"-depth"選項

-depth: 搜索到目錄時,先處理目錄中的文件(子目錄),再處理目錄本身。對于"-delete"這個action,它隱含"-depth"選項

zzfdeMacBook-Air:temp zzf$ ls -d testaaa

testaaa

zzfdeMacBook-Air:temp zzf$ find . -type d -name "testaaa" -delete

zzfdeMacBook-Air:temp zzf$ echo $?

0

zzfdeMacBook-Air:temp zzf$ ls -d testaaa

ls: testaaa: No such file or directory

4. 使用 + (加號)作為find命令的終止符,而不使用 ; (分號)

+ 和 ; 區(qū)別:

; 是find遍歷一次執(zhí)行一次exec后面的command, 而 + 會拆分批量找到的文件或目錄,批次運行命令,所以不會返回錯誤,而且當查找內(nèi)容過多時, + 會降低CPU使用率。

zzfdeMacBook-Air:temp zzf$ ls -d testaaa

testaaa

zzfdeMacBook-Air:temp zzf$ find . -type d -name "testaaa" -exec rm -r {} +

zzfdeMacBook-Air:temp zzf$ echo $?

0

zzfdeMacBook-Air:temp zzf$ ls -d testaaa

ls: testaaa: No such file or directory

當然也可以使用 | (管道) + xargs 的方式:

find . -type d -name "testaaa" | xargs rm -r

但是當testaaa并不存在時,執(zhí)行這個組合命令,會返回一個非0的狀態(tài)碼,并不符合我的場景。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的find命令过滤 no such_linux find -exec rm -r 报No such file or directory的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。