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.pdf
Bディレクトリから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