eg:
find -name "*.frag" -exec dos2unix {} \;
find -name "*.s" -exec rm -f {} \;
find 命令尋找檔案名稱為 .frag 的檔案,並將這些檔案替換到 {} 部分從而進行刪除。 ';' 前的參數都作為 rm 的參數, '/' 則是對 ';' 進行 escape(轉義)。
find /etc/rc.d -name ’*crond’
-exec file {} \;
尋找/etc/rc.d目錄下面所有以crond結束的檔案,並使用file指令查看其屬性,注意:exec和file間是一個空格,file和{}間是一個空格,{}和\;之間是一個空格,\;是一個整體。
http://hi.baidu.com/smallchicken/blog/item/4fe00218bdca050a34fa41d7.html
find 命令-exec選項粗解
為何是粗解?因為解釋並不會太詳細,如果需要更加詳細,自己man一下。
find 命令的 -exec 和 -execdir 還有 -ok 用來對找到的檔案執行命令,{}表示檔案名稱
區別:
-exec command ;
-exec選項對找到的檔案執行命令,傳遞的檔案名稱是絕對路徑,分號必須,通常為了防止shell解釋分號,需要添加\轉義,即 \; 結束該命令,也可以使用引號括起來,比如 ';' 這樣
例,列出所有 mp3 檔案:
find . -name "*.mp3" -exec ls {} \;
find可以同時執行多個命令,比如 先尋找,再複製
find . -name "*.mp3" -exec ls {} \; -exec cp {} /home/sin/Music/ \;
多個命令之間分別以 -exec開頭,然後接命令。每一個檔案都會挨個執行所有命令
-execdir 和 -exec一樣,不同的是,如果你傳遞的尋找路徑中含有絕對路徑,那麼 -execdir 仍是相對路徑,而 -exec就會是絕對路徑,
比如:find /home/fix/Music/ -name "*.mp3" -exec ls {} ';'
輸出:
/home/fix/Music/愛的思念.mp3
/home/fix/Music/包三姑外傳-長相守.mp3
/home/fix/Music/你瀟洒我漂亮.mp3
/home/fix/Music/竹苑情歌_背景.mp3
/home/fix/Music/最後一次的溫柔.mp3
.....
而:find /home/fix/Music/ -name "*.mp3" -execdir ls {} ';'
輸出:
./愛的思念.mp3
./包三姑外傳-長相守.mp3
./你瀟洒我漂亮.mp3
./竹苑情歌_背景.mp3
./最後一次的溫柔.mp3
如果命令本身尋找路徑為相對路徑,那麼 -exec 和 -execdir得到的檔案名稱是一樣的。
-exec command {} + 則表示並不一次次執行命令,而是等所有檔案找到後再執行,命令只執行一次,
例如:
find . -name "*.mp3" -exec ls {} +
表示再找到所有 mp3檔案後,最後執行一次 ls命令,這時候 {} 表示所有的檔案名稱,並且以空格分隔
-ok 很簡單,表示每次在執行命令前,需要確認一下。ok選項和exec選項一模一樣,只是多了每一步必須確認
來個執行個體,把所有的mp3檔案編碼轉換一下:
find . -iname "*.mp3" -execdir mid3iconv -e gbk {} \; -exec mid3iconv --remove-v1 {} \;
第一個命令轉換gbk編碼到unicode,第二個命令防止mocp亂碼,刪掉 v1