jjf*_*jjf 4 linux bash image-manipulation
我需要将一堆.rgb文件转换为.pngs(每个文件应保留其原始名称)。
我想了解如何转换第一个文件,然后将命令包装在“for”循环中。
这是我到目前为止:
find . -name "*.rgb" | sort | sed -n \1\p | xargs convert zzzzz.png
Run Code Online (Sandbox Code Playgroud)
但这不起作用。
我怎样才能让convert命令识别第二个参数zzzzz.png?
如果你想转换目录树中的所有文件,我会运行:
find . -name '*.rgb' | parallel convert {} {.}.png
Run Code Online (Sandbox Code Playgroud)
这将并行运行:
convert ./foo.rgb ./foo.png
convert ./bar/quux.rgb ./bar/quux.png
Run Code Online (Sandbox Code Playgroud)
在这里,我使用 GNU Parallel 来利用您所有的 CPU。根据您的系统,您可以将其安装为一个包,否则安装在gnu.org/software/parallel 中。在 Debian 中是:
apt-get install parallel
Run Code Online (Sandbox Code Playgroud)
编辑:
这是一个没有的解决方案GNU Parallel:
find . -name '*.rgb' -exec sh -c 'convert "$0" "${0%.*}.png"' {} \;
Run Code Online (Sandbox Code Playgroud)
和一个不太好的解决方案使用while..read:
find . -name '*.rgb' | while read FILE; do convert "${FILE}" "${FILE%rgb}png" ; done
Run Code Online (Sandbox Code Playgroud)