英文:
use find command in conjunction with string replacement
问题
在bash中,可以在for循环中像这样做,以便系统地将目录中的pdf文件转换为png文件。
for file in $(ls .)
do
convert ${file} ${file/.pdf/.png}
done
请注意,这里bash字符串替换语法允许编写简洁的代码。
当我尝试使用find
时,我完全陷入了困境。是否有任何方法可以与(类似的)字符串替换语法一起在find
中实现这个操作呢?当然,你可以像这样执行这个操作,例如:
find . | sed "s/\.pdf//" | xargs -i convert {}.pdf {}.png
但我喜欢能够使用(类似于bash的)字符串替换语法与find -exec
一起使用的想法。
英文:
In bash, one can do something like this in a for loop to, say, convert pdf files in a directory to pngs systematically.
for file in $(ls .)
do
convert ${file} ${file/.pdf/.png}
done
Note here that bash string replacement syntax allows for concise code.
When I tried the same with find
I'm hopelessly stuck. Is there any way of implementing this with find
in conjunction with (similar) string replacement syntax? Of course one can do this for example like this
find . | sed "s/\.pdf//" | xargs -i convert {}.pdf {}.png
but I like the idea of being able to use (something like bash) string replacement syntax together with find -exec
答案1
得分: 1
你需要运行Shell。
find . -maxdepth 1 -exec bash -c 'convert "$1" "${1/.pdf/.png}"' -- {} \;
为了提高可读性和正确性,你可以导出一个函数。
func() {
convert "$1" "${1/.pdf/.png}"
}
export -f func
find . -maxdepth 1 -exec bash -c 'func "$@"' -- {} \;
最后,你可以使用xargs来并行执行工作流。
func() {
convert "$1" "${1/.pdf/.png}"
}
export -f func
find . -maxdepth 1 -print0 | xargs -P$(nproc) -0n1 bash -c 'func "$@"' --
使用ShellCheck检查你的脚本。
英文:
You have to run the shell.
find . -maxdepth 1 -exec bash -c 'convert "$1" "${1/.pdf/.png}"' -- {} \;
You can export a function for readability and correctness.
func() {
convert "$1" "${1/.pdf/.png}"
}
export -f func
find . -maxdepth 1 -exec bash -c 'func "$@"' -- {} \;
Finally, you can use xargs to parallelize workflow.
func() {
convert "$1" "${1/.pdf/.png}"
}
export -f func
find . -maxdepth 1 -print0 | xargs -P$(nproc) -0n1 bash -c 'func "$@"' --
Check your script with shellcheck.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论