我想遍历 jpg 文件,使用find
找到它们。
结果是完整路径名,其中包括./
。我想用./
删除替换./newsubdir/
,以便在进程中将其用作输出文件名,并使用相同的内容在 newsubdir 中创建原始文件的修改后的副本。文件夹结构。
这就是我尝试过的。
#!/bin/bash
find . -type f -name '*jpg'
for file do
echo ${file:1}
done
但是,子字符串提取似乎根本不起作用。是否有这样做的原因或其他方式。 重击非常新。
我最终想要这样的事情。尝试对一堆图片进行正方形处理,但保持文件夹结构。
#!/bin/bash
find . -type f -name '*jpg'
for file do
convert '$file[2048x2048]' -gravity center -extent 2048x2048 "./newsubdir${file:1}"
done
答案 0 :(得分:2)
您接近了!粘一点更接近原始代码(和因此避免开始超过必要的弹):
#!/bin/bash
find . -type f -name '*.jpg' -exec bash -c '
for file do
convert "$file[2048x2048]" -gravity center -extent 2048x2048 "./newsubdir${file:1}"
done
' _ {} +
...或者,使用原始外壳并完全避免使用-exec
:
#!/bin/bash
while IFS= read -r -d '' file; do
convert "$file[2048x2048]" -gravity center -extent 2048x2048 "./newsubdir${file:1}"
done < <(find . -type f -name '*.jpg' -print0)
这些模式以及更多模式是UsingFind的一部分。
答案 1 :(得分:1)
find . -type f -name '*jpg' -exec bash -c '
file=$1; convert "${file}[2048x2048]" -gravity \
center -extent 2048x2048 "./newsubdir/${file:1}"' _ {} \;
坦率地说,我认为编写脚本进行转换并仅使用find . -type f -name '*.jpg' -exec script {} \;
进行调用要好得多。这样做将有助于避免不可避免的报价问题。