コンテンツを含む新しいファイルを繰り返し生成するスクリプト

コンテンツを含む新しいファイルを繰り返し生成するスクリプト

各フォルダには、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がディレクトリからパスを削除し、ディレクトリ名のみを残すように構成されています。$1sh -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

おすすめ記事