여러 파일을 복사하되 확장자를 동일하게 유지하는 방법은 무엇입니까?

여러 파일을 복사하되 확장자를 동일하게 유지하는 방법은 무엇입니까?

여러 파일을 반복하면서 $file현재 파일을 표시하고 있습니다.

현재 파일을 복사하거나 이름을 바꾸고 확장자를 동일하게 유지하려면 어떻게 해야 합니까?

예를 들어 $file=x.jpg

$file파일 이름을 사용하여 복사본을 만드는 방법x_orig.jpg

지금까지 나는 다음을 가지고 있습니다 :

for file in /tmp/p/DSC*.JPG; do
  cp $file $file+'_orig'.JPG
done

하지만 이것은 파일을 복사합니다

DSCF1748.JPG

도착하다

DSCF1748.JPG+_orig.JPG

그리고 나는 이름을 원해요

DSCF1748_orig.JPG

마찬가지로,cp $file "$file"_orig.JPG

결과 파일은 다음과 같습니다DSCF1748.JPG_orig.JPG

_orig파일 이름의 중간 부분을 얻고 싶습니다 ...

답변1

배쉬를 사용할 수 있습니다문자열 교체 기능그 이유는 다음과 같습니다.

for file in /tmp/p/DSC*.JPG; do
  cp "$file" "${file%.JPG}"_orig.JPG
done

일반적인 형식은 끝부터 삭제하는 것입니다 ${string%substring}. 예를 들어:substringstring

$ f=foobar.JPG; echo "${f%.JPG}"
foobar

답변2

zcp -o -p '/tmp/p/DSC*.JPG' '$f:r_orig.JPG'

또는 동등하게

zcp -o -p '/tmp/p/(DSC*).JPG' '/tmp/p/${1}_orig.JPG'

이를 위해서는 zsh를 실행하고(다른 쉘에는 그런 기능이 없음) 이것을 다음 위치에 넣어야 합니다 ~/.zshrc.

autoload -U zmv
alias zcp='zmv -C'
alias zln='zmv -L'

-o -p파일 메타데이터(특히 수정 시간)를 보존하기 위해 명령 에 zcp옵션이 전달되도록 지시합니다 .-pcp

관련 정보