递归重新编码除某些目录之外的所有项目文件并保留权限

时间:2015-06-05 10:11:33

标签: linux shell find recode

如何递归重新编码所有项目文件不包括某些目录保留权限

1 个答案:

答案 0 :(得分:0)

基于this问题,但其解决方案不保留权限,因此我不得不对其进行修改。

警告:由于递归删除是解决方案的一部分,自行承担风险

任务:

递归重新编码所有项目文件(iso8859-8 - > utf-8)不包括'。git'和'.idea'dirs以及保留权限

解决方案(在我的情况下运作良好):

备份项目的目录,然后cd。运行:

find . -not -path "./.git/*" -not -path "./.idea/*" -type f -print -exec iconv -f iso8859-8 -t utf-8 -o {}.converted {} \; -exec sh -c 'cat {}.converted > {}' \; -exec rm {}.converted \;

二进制文件和图像文件将无法重新编码,因为它们不是文本,因此像'image.jpeg.converted'这样的文件将与'image.jpeg'一起保留。要清理这个烂摊子:

find . -not -path "./.git/*" -not -path "./.idea/*" -type f -regex '.*\.converted' -exec rm {} \;

在您这样做之前,您可能只想打印(没有rm),看到只列出了您真正要删除的文件。