xargs:重定向后的变量替换

Ale*_*ing 5 bash find xargs

我正在尝试查找所有具有编码iso-8859-1的文本文件,并将它们转换为UTF-8.我到目前为止的尝试是:

find . -name '*.txt' | xargs grep 'iso-8859-1' | cut -d ':' -f1 | 
xargs iconv -f ISO-8859-1 -t UTF-8 {} > {}.converted
Run Code Online (Sandbox Code Playgroud)

(显而易见的)问题是最后一个变量替换不起作用,因为{}在重定向之后发生,并且不属于xargs.因为我只得到一个文件{}.converted,而不是 a.txt.converted,b.txt.converted等等.我怎样才能使这个工作?

注意:我在Cygwin上这样做,其中iconv似乎不支持-o.

Ole*_*nge 3

如果您安装了 GNU Parallel http://www.gnu.org/software/parallel/,您可以执行以下操作:

find . -name '*.txt' | parallel grep -il iso-8859-1 | parallel iconv -f ISO-8859-1 -t UTF-8 {} \> {}.converted
Run Code Online (Sandbox Code Playgroud)

您可以简单地通过以下方式安装 GNU Parallel:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem
Run Code Online (Sandbox Code Playgroud)

观看 GNU Parallel 的介绍视频以了解更多信息: https://www.youtube.com/playlist?list =PL284C9FF2488BC6D1