• Techo

[linux指令] 如何刪除(或其他處理)目錄底下所有特定名稱的檔案或是料夾,使用find與-exec

在 linux 的環境下

可能會遇到需要刪除某個資料夾內部所有特定檔名的檔案

或是要刪除某個相同名稱的子資料夾時

可以使用 find 指令配合 -exec來執行對應的處理

比如說你今天把某個已有 svn 版本管理的資料複製到另一個版本管理的專案下

你想要將這個資料夾改成現在存放位置的版本管理

就必須先移除就有版本所有的 .svn/ 資料夾

但如果這個資料夾內部有層層資料夾

那豈不是要一個一個進去刪除嗎

這樣子實在是太麻煩

所以我們先使用find指令找出目前目錄底下所有符合這種名稱的資料夾

find . -type d -name .svn

-type d 指的是 directory,也就是搜尋資料夾

如果是要搜尋檔案,改成-type f 即可

-name .svn 就是指定我們要搜索的檔名

當然你可以配合正規表示法(regular expression)來多元化搜尋

強烈建議先使用 find 確認搜尋對象是你真正需要的

再來使用 -exec 來做對應處理

以避免檔案誤刪除狀況


如何將搜尋到的檔案或是資料夾全部刪除呢

指令如下

find . -type d -name .svn -exec rm -rfv {} \;

rm是linux的刪除指令

-r : --recursive

-v, --verbose

-f, --force ignore nonexistent files, never prompt

請注意-f將會強制刪除不會有提醒訊息

{}則是代表前面find查找出来的文件名集合

再加上一個空格和一個 \

最後再加上一個 ;

-exec 是以 ; 作為結束標示的

中間則是放在你想要對find找到的東西執行的指令

也就是 rm -rfv {}

你可以替換你想要執行的指令

以下三種範例供參考


範例1 : -exec中使用grep命令

find /etc -name "passwd*" -exec grep "root" {} \;


範例2 : 查找文件統一移動到指定目錄

find . -name "*.log" -exec mv {} .. \;


範例3 : 用 -exec 執行複製命令

find . -name "*.log" -exec cp {} test3 \;

282 次瀏覽
Screen Shot 2018-11-05 at 12.06.31 PM.pn
  • Instagram - White Circle
  • Google+ - White Circle
  • Facebook - White Circle

Contact Us

Techo私人程式家教

官方LINE ID : @tutortecho

zh-Hant.png

© Copyright 2018 by Sherry Wu and Techo Chao.

Proudly created with Wix.com,

but page loading is too slow,so I don't recommend it.