遍历子目录,cd 进入子目录,然后处理文件

Loop through subdirectories, cd into the subdirectory, then process the files

我有一个脚本可以使用 inkscape 将 SVG 文件转换为 PNG。但是,转换后的文件放在脚本所在的顶级目录下。我想把转换后的文件放到它的子目录下。

顶级目录如下所示:

folderA
|---file1.svg
|---file2.svg
|---file3.svg
folderB
|---file4.svg
|---file5.svg
|---file6.svg
svg2png.sh

在 运行 脚本之后,我希望 PNG 文件位于其子目录中,如下所示:

folderA
|---file1.svg
|---file1.png
|---file2.svg
|---file2.png
|---file3.svg
|---file3.png
folderB
|---file4.svg
|---file4.png
|---file5.svg
|---file5.png
|---file6.svg
|---file6.png
svg2png.sh

不是这样的:

file1.png
file2.png
file3.png
file4.png
file5.png
file6.png
folderA
|---file1.svg
|---file2.svg
|---file3.svg
folderB
|---file4.svg
|---file5.svg
|---file6.svg
svg2png.sh

这是svg2png.sh

#/bin/sh
find . -name \*.svg -exec sh -c 'inkscape -z -e $(basename {} .svg).png {}' \;

这是更新后的 svg2png.sh,由 @anishsane 提供:

#/bin/sh
find . -name \*.svg -execdir sh -c 'inkscape -z -e $(basename {} .svg).png {}' \;

将其添加为答案。这应该可以帮助您:

find . -name \*.svg -execdir sh -c 'inkscape -z -e $(basename {} .svg).png {}' \;