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

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

여러 파일을 반복하고 있으며 $file현재 파일을 나타냅니다.

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

예를 들어 $file=x.jpg

$file파일 이름이 's'인 사본을 만드는 방법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

bash를 사용할 수 있습니다문자열 대체 기능그에 대한:

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

관련 정보