「.tif」画像を「.jpg」に一括変換

「.tif」画像を「.jpg」に一括変換

私はManjaro GNU / Linuxを使用しています。このディレクトリの下には、などfilesの名前を持つサブディレクトリが約650個あります。file1file2file3

各サブディレクトリには2〜11個の画像があります.tif

以前と同じ名前の同じサブディレクトリにあるすべてのイメージを自動的に.tif変換.jpegまたは維持するコマンドまたはスクリプトを作成したいと思います。.jpg

私は次のコマンドがあることを知っています。

convert source.tif ~/converted.jpg

助けてもらえますか?

ありがとうございます!

ベストアンサー1

最も簡単な方法は、ファイル名のサフィックスを使用して見つかった各ファイルを変換するfind短いインラインスクリプトを実行することです。.tif

find files/ -name '*.tif' -type f -exec sh -c '
    for pathname do
        convert "$pathname" "${pathname%.tif}.jpg"
    done' sh {} +

上記のインラインスクリプトは、sh -cバッチで見つかった通常のファイルのパス名(サフィックスはディレクトリの下にあります)として呼び出されます。パラメータ置換は値からサフィックスを削除し、最後に追加します。find.tiffiles${pathname%.tif}.jpg.tif$pathname.jpg

文字列で始まる〜650個のサブディレクトリのみを探し、他のサブディレクトリは無視するのではなくfiles/file*/検索パスとして使用されます。files/filesfile

これによりファイルは所定の位置に保持されますが、ループ内のコマンドの後にファイルを追加すると、.tif正常な変換後にファイルを削除できます。&& rm "$pathname"convert


zshシェルでは、findシェルの高度なファイル名一致と文字列操作機能を放棄して使用できます。

for pathname in files/**/*.tif(D-.); do
    convert $pathname $pathname:r.jpg
done

ここではfiles/**/*.tif(D-.)、名前がディレクトリ内または下で終わるすべての一般的なファイルのリストに展開されます。最後にワイルドカードがある場合、ワイルドカードパターンは通常のファイル(「隠された」名前がある可能性があります)のみに一致します。.tiffiles(D-.)

その後、パス名(ファイル拡張子のない名前)の「ルート」が:r提供されます$pathname

サブディレクトリのファイルfiles/file*/**/*.tif(D-.)にのみ検索を制限するために使用されます。file*


シェルを使用すると、bash次のように上記のような操作を実行できます。

shopt -s dotglob failglob globstar
for pathname in files/**/*.tif; do
    convert "$pathname" "${pathname%.tif}.jpg"
done

ここで設定されているシェルオプションを使用すると、隠された名前にワイルドカードおよびワイルドカード演算子を使用できます**。また、zshシェルのデフォルト値と同様に、一致しないパターンが原因でエラーが発生します。

おすすめ記事