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