通过子目录递归运行命令

Ril*_*n42 5 bash scripts

我试图将一堆图像转换为可能位于多个子目录中的缩略图,并将图像的副本保存为子目录中的缩略图,但我无法弄清楚语法。任何的建议都受欢迎。

convert test/*/*.jpg -50x50 test/*/*_thumb.jpg
Run Code Online (Sandbox Code Playgroud)

ilk*_*chu 6

shell 循环也应该这样做:

for file in test/*/*.jpg ; do
    new=${file%.jpg}_thumb.jpg 
    convert "$file" -resize 50x50 "$new"
done
Run Code Online (Sandbox Code Playgroud)

或者使用 Bash 的globstar,如果文件可以位于任意目录级别,则更好:

shopt -s globstar
for file in test/**/*.jpg ; do ...
Run Code Online (Sandbox Code Playgroud)

${file%.jpg}获取变量的值file.jpg从末尾删除字符串。(请参阅有关参数扩展的 BashGuide


Kam*_*mil 5

您应该使用 find 来查找您需要的所有文件。

find test -iname *.jpg -exec convert {} -resize 50x50 {}_thumb \;
Run Code Online (Sandbox Code Playgroud)

然后您应该使用以下命令将名称为 *.jpg_thumb 的文件重命名为 *_thumb.jpg:

find -name *.jpg_thumb -exec rename -e 's/^(.*)(.jpg)(_thumb)$/\1\3\2/' '{}' \;
Run Code Online (Sandbox Code Playgroud)

请注意,-50x50 不是转换的合法参数。您应该使用-resize具有50x50上面示例中的值的参数。