サブディレクトリ内のすべてのファイルを解凍し、元のディレクトリの名前に変更します

サブディレクトリ内のすべてのファイルを解凍し、元のディレクトリの名前に変更します

奇妙な状況になってしまいました。フォルダが 35 個あります。最初のフォルダは 1、2 番目のフォルダは 2 というように名前が付けられています。これらのフォルダにはそれぞれ 4 つのファイルがあります。'1.png'、'2.png'、'3.png'、'4.png'。これらのフォルダのそれぞれで、「convert *.png -append out.pdf」を実行し、各 'out.pdf' の名前を元のディレクトリ (たとえば、最初のフォルダの 'out1.pdf') に変更してから、各 pdf を元のフォルダから解凍します。これは可能ですか? ループを試しましたが、試したものはすべて命名システムと一致しないようです。

答え1

次のようなことを試してください:

#!/bin/sh

for dir in $(seq 1 35)
do
    (
         cd $dir || exit 1
         rm -f out$dir.pdf
         for n in 1 2 3 4
         do
             convert $n.png -append out$dir.pdf  || exit 2
         done
    )
done

このスクリプトは POSIX に準拠しており、 を必要としませんbash。そのため、 となります#!/bin/sh

括弧内のコードはサブシェルで実行されるため、cdコマンドは閉じ括弧までのディレクトリのみを変更します。ループの次の反復は元の作業ディレクトリで開始されます。

あなたの例では、 の構文がconvert間違っていると思います。Convert は 1 つの入力ファイルのみを受け取りますが、元の質問では は*.png4 つの入力ファイルを渡します。おそらく、それが問題の一部です。

関連情報