find命令同时与-exec和xargs组合的问题

批量转换编码并覆盖:

find *.cue -exec sh -c "iconv -f GB18030 -t UTF8 {} -o {}" \;

find到含空格文件名的处理方法:

find *.cue -print0 | xargs -0  rm -rf

如何结合两者呢?在避免空格文件名的同时批量转码

阅读 6.4k
2 个回答

-exec和xargs是普遍的两种 将命令组合使用的方式:
使用-exec的方式安全,不怕空格文件(其他特殊符号未测,应该也没问题):
find . -maxdepth 1 -name '[星号].cue' -exec iconv -f GB18030 -t UTF8 {} -o {} \;
btw, 原来{}还可以使用两次啊~,真没试过,呵呵。
而使用xargs的方式,因易理解而更被人熟知,
在不加特别的参数的情况下,缺点就是空格文件处理得不好(其他特殊符号未测,应该也有问题):
于是分别有了-print0和-0选项,
表示不以空格判断字串的结束,而是以\0分隔(这样就可无视任何特殊字符的影响):
find . -maxdepth 1 -name '[星号].cue' -print0 | xargs -0 rm -rfv

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
101 新手上路
子站问答
访问
宣传栏