Linux命令:find . -type d -name "doc" -exec rm -rf {} \;報錯分析及解決

# mkdir docspa

# find . -type d -name "doc" -exec rm -rf {} \;  #雖然此處報錯,卻刪除成功圖片

# echo $?file

緣由分析

    首先了解一個知識點,很容易被忽略,find會查找指定路徑下的目錄和文件及目錄的子目錄和子文件; find命令在查找第一個doc目錄就將此路徑傳遞給-exec後面的命令執行操做,從下面的這個圖片能夠看出,在查找到第一個doc路徑後打印(-print)該路徑,而後將該路徑傳遞給後面的echo命令,那麼也會再次打印該路徑,故打印兩次,執行完-exec後面的命令後,繼續執行find命令,在剛纔查找到doc路徑下查找下一個名稱爲doc的命令。搜索

    故,在執行命令: # find . -type d -name "doc" -exec rm -rf {} \; 將查找到的目錄傳遞給rm進行刪除,而此時doc目錄已經刪除,find又要在已刪除的doc目錄下進行繼續搜索是否有名稱爲doc的目錄,因已刪除,故報錯(find: `./doc': No such file or directory)方法

總結:

    find將結果傳遞給-exec後的命令,而後繼續執行find再次查找子目錄im

    find命令會查找指定路徑下的文件和目錄及目錄下的子文件和目錄。總結

解決方法

    # find . -type d -name "doc" | xargs rm -rfimg

圖解:

相關文章
相關標籤/搜索