各フォルダには、2〜3個の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
ファイルが1つ以上含まれている場合は、ディレクトリからすべてのファイルを抽出し、ディレクトリ名をファイル名としてSVGファイルをディレクトリにエクスポートします。inkscape
.jpg
出力ファイル名は、スクリプトへの最初のコマンドライン引数$1/${1##*/}.svg
(ファイルを含むディレクトリへのパス)とwhereがディレクトリからパスを削除し、ディレクトリ名のみを残すように構成されています。$1
sh -c
.jpg
${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