스크립트 복사 및 이름 바꾸기

스크립트 복사 및 이름 바꾸기
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

관련 정보