2010-10-07 152 views
0

我在使用Snow Leopard的Mac OS X上。使用Unix(LF)将Mac OS X html文件批量转换为UTF-8

我需要批量转换很多原先在Windows创建的UTF-8使用Unix(LF)换行.htm文件。

我可以批量重命名的所有文件.HTML与NameMangler。

我可以做一个搜索/所有文件的替换更新所有超链接,以反映更改扩展名使用TexFinderX为.html。

现在最后一步是做批量转换为UTF-8和使用Unix(LF)换行。

有谁知道一个可以做到这一点的应用程序?我希望我不必在文本编辑器中手动打开每个文件并分别保存每个文件。我担心我可能会意外地错过一些文件......而这需要很长时间。

TIA, 琳达

回答

1

你会想看看这个dos2unix端口为MacOS。自己没有使用它,因为我没有Mac,但dos2unix是将Windows文件转换为unix文件的一般unix实用程序。

+0

避免darwinports.com链接(为什么? - > http://trac.macports.org/wiki/DarwinPorts)。在此处使用最新的直接链接到MacPorts端口:http://www.macports.org/ports.php?by=name&substr=dos2unix – 2010-10-08 01:00:35

0

这是在Linux上,但它应该在Mac OS上工作。您可能需要检查find命令的选项,这在Mac OS上可能略有不同。如果您无法找到适用于Mac的recode,则可能会找到iconv,并调整选项。其实我只是用这个疯狂的不是,真的,oneliner上2400+的文件,其中1400 +的转化:

find . -regextype posix-awk -iregex ".*\.(txt|htm|html|cgi|php|pl|pm)" | while read f; do t=`mktemp "$f.utf8.XXXXX"`; if [ ! "$?" = 0 ]; then echo "ERROR: cannot make temp file for $f"; continue; fi; echo recoding $f to $t; if cat "$f" | recode cp1252/..utf8/ >"$t" ; then if diff -wq "$f" "$t"; then echo No change: $f; rm "$t"; else mv "$f" "$f.cp1252" && mv "$t" "$f" && echo OK $f; fi; else echo "ERROR: $?"; fi; done | tee -a convert-results.txt 

下面是几行相同,使其稍微更具可读性:

find . -regextype posix-awk -iregex ".*\.(txt|htm|html|cgi|php|pl|pm)" | \ 
    while read f; do 
    t=`mktemp "$f.utf8.XXXXX"` 
    if [ ! "$?" = 0 ]; then 
     echo "ERROR: cannot make temp file for $f" 
     continue 
    fi 
    echo recoding $f to $t 
    if cat "$f" | recode cp1252/..utf8/ >"$t" ; then 
     if diff -wq "$f" "$t"; then 
     echo No change: $f 
     rm "$t" 
     else 
     mv "$f" "$f.cp1252" && mv "$t" "$f" && echo OK $f 
     fi 
    else 
     echo "ERROR: $?" 
    fi 
    done \ 
| tee -a convert-results.txt 

我使用了cp1252/..utf8/,因为我已经在LF中有行结尾,并且想保持这种结局。您可能需要将其调整为适合您的文件,并阅读recode手册页。或者,也许iconv也处理线结束?

当然,备份整个目录树执行任何这样的命令之前!