我有一个文件夹树,其中每个文件夹包含两到三个 jpg 文件。由于我有很多文件夹,我想开发一个脚本,在每个包含 jpg 文件的文件夹中递归创建一个 Inkscape 文件,并使用包含文件夹的名称重命名 svg 文件。我怎样才能实现这个目标?
答案1
查找包含 JPG 文件的目录并inkscape
对其运行:
find . -type d \
-exec sh -c 'set -- "$1"/*.jpg; [ -e "$1" ]' sh {} ';' \
-exec sh -c 'inkscape --export-plain-svg="$1/${1##*/}.svg" "$1"/*.jpg' sh {} ';'
这将查找当前目录下的目录。如果该目录至少包含一个.jpg
文件,inkscape
则在此目录上调用,从该目录中提取所有.jpg
文件并将 SVG 文件导出到该目录中,并以该目录的名称作为文件名。
输出文件名的构造方式为$1/${1##*/}.svg
where$1
是脚本的第一个命令行参数sh -c
(这是包含文件的目录的路径.jpg
),而 where${1##*/}
将从目录中删除路径并仅保留目录名称。
这是未经测试的,因为我没有inkscape
并且我不熟悉该程序(除了阅读其手册)。
给定以下目录结构:
$ tree
.
|-- dirA
| `-- 1
| |-- file.jpg
| |-- image.jpg
| `-- picture.jpg
`-- dirB
|-- 2
| |-- file.jpg
| |-- image.jpg
| `-- picture.jpg
|-- 3
| |-- file.jpg
| `-- image.jpg
`-- 4
|-- file.jpg
`-- image.jpg
6 directories, 10 files
这是会被执行的:
inkscape --export-plain-svg=./dirA/1/1.svg ./dirA/1/file.jpg ./dirA/1/image.jpg ./dirA/1/picture.jpg
inkscape --export-plain-svg=./dirB/2/2.svg ./dirB/2/file.jpg ./dirB/2/image.jpg ./dirB/2/picture.jpg
inkscape --export-plain-svg=./dirB/3/3.svg ./dirB/3/file.jpg ./dirB/3/image.jpg
inkscape --export-plain-svg=./dirB/4/4.svg ./dirB/4/file.jpg ./dirB/4/image.jpg