find 命令-exec选项粗解

转:http://hi.baidu.com/microji/item/d1a789ce9f9c0c26e80f2e03

find 命令-exec选项粗解

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

    A+
发布日期:2014年05月26日  所属分类:未分类

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: