여러 파일을 반복하고 있으며 $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}
제거됩니다 . 예를 들어:substring
string
$ 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
옵션을 전달하도록 지시합니다 .-p
cp