スクリプトのコピーと名前の変更

スクリプトのコピーと名前の変更
Directory A:
        1111111_1.pdf
        2222222_1.pdf
        1234567_1.pdf
Directory B:
        abcdefg.pdf
        zzzzzzz.pdf
        1234567.pdf
        1111111.pdf
        2222222.pdf
        aaaaaaa.pdf
        bbbbbbb.pdf
        etc....
        …....

_2.pdfBディレクトリからAディレクトリに3つの同じ7桁のファイルのみをコピーし、名前を次のように変更するシェルスクリプトを作成するにはどうすればよいですか?

Directory A:
        1111111_1.pdf
        1111111_2.pdf
        2222222_1.pdf
        2222222_2.pdf
        1234567_1.pdf
        1234567_2.pdf

答え1

これはあなたの要件を満たす必要があります。

for i in A/*_1.pdf
do
  root=${i#A/}
  root=${root%_1.pdf}

  if [ -f "B/${root}.pdf" ]
  then
    cp -i "B/${root}.pdf" "A/${root}_2.pdf"
  fi
done

Bに一致するファイルを持つAのすべてのファイルを見つけ、それに応じてコピーします。これはシェルパラメータ拡張を使用して、ファイル名をある形式から別の形式に操作します。

7桁の名前に限定されません。必要なのか、単に問題を説明するのかはわかりません。 1と2以外の数字で動作するには、より複雑です。

誤って上書きするのを防ぎましたcp -i-i既存のファイルを上書きするには削除してください。

答え2

以下は目的の操作を行います。

cd A
B=../B  # Put path to B here
for a in *_1.pdf; do b=${a%_1.pdf}; [ -f "$B/$b.pdf" ] && cp "$B/$b.pdf" "${b}_2.pdf" ; done

上記のコードをコマンドラインに入力する代わりにスクリプトに入れる場合は、改行とインデントを使用する方が良いでしょう。

cd A
B=../B  # Put path to B here
for a in *_1.pdf
do 
    b=${a%_1.pdf}
    [ -f "$B/$b.pdf" ] && cp "$B/$b.pdf" "${b}_2.pdf"
done

関連情報