我希望将我在LaTeX上的所有作品从ISO8859-1转换为UTF-8。
我找到了一个我想要改编的脚本。所以这就是我写的:
# start encoding
encodeFrom='ISO-8859-1'
# target encoding
encodeTo='UTF-8'
# finding files whose extensions correspond to the given parameter
for filename in ` find . -type f -name *.{$1}`
do
echo $filename
# saving source file
mv $filename $filename.save
# convert file
iconv -f $encodeFrom -t $encodeTo $filename.save -o $filename
# check that file is in unix mode
dos2unix $filename
done
问题是:'发现'命令不起作用:使用"设置-v"进行测试,我得到:
find . -type f -name *.{$1}
我做错了什么?我试图找到自己的方式扔一本bash书(事实上,两个:-),但无法找到解决方案。
甚至只尝试tex文件转换:
for filename in ` find . -type f -name *.tex`
我明白了:
find: les chemins doivent précéder l'expression : arithmetique.tex
答案 0 :(得分:2)
请参阅ParsingLs,为什么 NOT 解析for循环中
find
或ls
的输出。
使用正确的进程替换语法和while循环, ALWAYS 双引号变量。
while IFS= read -r filename
do
echo "$filename"
mv "$filename" "${filename}".save
iconv -f "$encodeFrom" -t "$encodeTo" "${filename}".save -o "$filename"
dos2unix "$filename"
done < <(find . -type f -name "*.{$1}")
如下所示,如果您的文件名包含换行符号,空格或任何其他特殊字符,则建议在-print0
中使用find
选项
-print0
True; print the full file name on the standard output, followed by a null character
(instead of the newline character that -print uses). This allows file names
that contain newlines or other types of white space to be correctly interpreted by
programs that process the find output.
在find
while IFS= read -r -d'' filename
do
echo "$filename"
mv "$filename" "${filename}".save
iconv -f "$encodeFrom" -t "$encodeTo" "${filename}".save -o "$filename"
dos2unix "$filename"
done < <(find . -type f -name "*.{$1}" -print0)
使用它会在文件名之间追加\0
,并使用相同的字符读取文件名,确保您的find
结果完好无损。
答案 1 :(得分:0)
好的,我找到了答案:只是&#34;保护&#34;论证&#39; 。$ 1&#39;像这样:&#34; 。$ 1&#34;。
我所要做的只是问: - )
\再见