Linux Shell脚本在每个子目录中运行命令

时间:2015-07-10 19:55:43

标签: linux shell

我试图创建一个可以浏览图像/文件夹中所有子目录的shell脚本,然后从ImageMagick运行转换实用程序。

我可以让脚本在单个文件夹中正常工作,但无法从顶层目录中获取正确的语法。

# convert a series of *.png images to *.svg
# images/subfolder1
# images/subfolder2
# etc.

for dir in `ls /*`;
do
    for x in `ls -1 /*.png`
    do
        y=`echo $x | cut -d "." -f1`
        echo "convert $x into $y.svg"
        convert $x $y.svg

    done  

done

完成这项工作的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

我认为使用GNU Parallel可以获得更好的性能,可读性和简单性:

find . -name \*.png | parallel convert {} {.}.svg

为什么要为所有可爱的英特尔核心付费而只使用其中一个呢?

答案 1 :(得分:1)

顺便说一句makefile:

pngs = $(wildcard */*.png)
svgs = $(pngs:.png=.svg)

all: $(svgs)

%.svg: %.png
    @echo $@ $^

这也可以与make -j

并行运行

答案 2 :(得分:0)

假设脚本是从images目录运行的:

#!/bin/bash
shopt -s nullglob
for p in */*.png; do
    s="${p/.png/.svg}"
    echo "converting $p into $s"
    # convert "$p" "$s"
done