如何在bash中使用two FOR循环
有人能帮我调查一下吗?我正在尝试使用Imagemagick合并两个图像。一个是纯文本,而另一个有很好的背景。我有超过12000个纯文本和82个背景图像,所以我必须构建两个FOR循环,以便能够随机选择两个图像。但不幸的是,第二个循环不适用于背景图像。它只选择一个并将其与所有纯文本合并,而不是随机合并。 下面是我如何实现它的如何在bash中使用two FOR循环,bash,for-loop,imagemagick,Bash,For Loop,Imagemagick,有人能帮我调查一下吗?我正在尝试使用Imagemagick合并两个图像。一个是纯文本,而另一个有很好的背景。我有超过12000个纯文本和82个背景图像,所以我必须构建两个FOR循环,以便能够随机选择两个图像。但不幸的是,第二个循环不适用于背景图像。它只选择一个并将其与所有纯文本合并,而不是随机合并。 下面是我如何实现它的 for i in $(find /home/user/png -name "*.png"); do for o in $(find /home/user/jpg -n
for i in $(find /home/user/png -name "*.png"); do
for o in $(find /home/user/jpg -name "*.jpg"); do
composite -gravity Center $i $o "${i%.*}.jpg";
done
done
事实上,我有超过12000个纯文本和82个背景,所以我必须构建两个For循环,以便能够随机选择两个图像
如果背景和图像文件路径不包含空格字符,
那么下面的技术应该会起作用。
适当地更换所有find…
您可以将82个背景文件放入一个数组中:
backgrounds=($(find ...))
定义用于拾取随机背景的函数:
randombg() {
local index
((index = RANDOM % ${#backgrounds[@]}))
echo ${backgrounds[index]}
}
find ... | while read image; do
bg=$(randombg)
composite -gravity Center $image $bg "${image%.*}.jpg"
done
然后在图像文件上循环,并为每个文件选择一个随机背景:
randombg() {
local index
((index = RANDOM % ${#backgrounds[@]}))
echo ${backgrounds[index]}
}
find ... | while read image; do
bg=$(randombg)
composite -gravity Center $image $bg "${image%.*}.jpg"
done
事实上,我有超过12000个纯文本和82个背景,所以我必须构建两个For循环,以便能够随机选择两个图像
如果背景和图像文件路径不包含空格字符,
那么下面的技术应该会起作用。
适当地更换所有find…
您可以将82个背景文件放入一个数组中:
backgrounds=($(find ...))
定义用于拾取随机背景的函数:
randombg() {
local index
((index = RANDOM % ${#backgrounds[@]}))
echo ${backgrounds[index]}
}
find ... | while read image; do
bg=$(randombg)
composite -gravity Center $image $bg "${image%.*}.jpg"
done
然后在图像文件上循环,并为每个文件选择一个随机背景:
randombg() {
local index
((index = RANDOM % ${#backgrounds[@]}))
echo ${backgrounds[index]}
}
find ... | while read image; do
bg=$(randombg)
composite -gravity Center $image $bg "${image%.*}.jpg"
done
使用
shuf
命令创建源源不断的无序*.jpg文件,这些文件在for
循环中通过reado
输入:
shuf -r -e $(find /home/user/jpg -name "*.jpg") |
for i in $(find /home/user/png -name "*.png") ; do
read o
composite -gravity Center "$i" "$o" "${i%.*}.jpg"
done
由于没有
bash
数组,因此上述代码默认为POSIX。使用shuf
命令创建源源不断的无序*.jpg文件,这些文件在for
循环中通过read o
输入:
shuf -r -e $(find /home/user/jpg -name "*.jpg") |
for i in $(find /home/user/png -name "*.png") ; do
read o
composite -gravity Center "$i" "$o" "${i%.*}.jpg"
done
由于没有
bash
数组,因此上述代码默认为POSIX。非常感谢您的帮助。这很有魅力。我对你的帮助感激不尽。这就像魅力一样。你不应该在这里对循环使用任何。请参阅。您不应该在此处对
循环使用任何。看见