카메라를 RAW/JPEG 모드로 촬영하는데 RAW 이미지는 용량이 커서(파일 크기) 미리 보는 데 시간이 오래 걸리기 때문에 JPEG로 미리 보고 원하지 않는 것은 삭제합니다.
예를 들어 다음과 같은 경우가 있습니다.
image1.CR2
image1.jpg
image2.CR2
image2.jpg
image3.CR2
image4.CR2
image5.CR2
...
.CR2
일치하지 않는 항목 .jpg
(이 예에서는 이미지 3~5) 을 제거하고 싶습니다 .
다음 코드를 발견했습니다.
rm *.CR2(e:'[[ ! -e ${REPLY%.CR2}.jpg ]]':)
하지만 내 컴퓨터에서는 작동하지 않습니다. 저는 Donkey에서 근무하는 동안 Bash를 접해본 적이 없었기 때문에 Bash를 알아내려고 할 때 당황했습니다.
오류가 발생합니다.
-bash: syntax error near unexpected token `('
누구든지 올바른 방향으로 나를 가리킬 수 있습니까?
답변1
루프를 사용하세요.
for x in *.CR2
do
[ -e "${x%.CR2}.jpg" ] || echo rm "$x"
done
각 파일을 살펴보고 .CR2
호출합니다 x
.${x%.CR2}
.CR2
삭제된 파일 이름 으로 확장됩니다., 확장명을 추가 .jpg
하고 존재하는지 확인합니다.그리고-e
. 그렇지 않은 경우 원본 파일을 삭제하겠습니다 .CR2
.
echo
실제로 아무것도 삭제하기 전에 원하는 파일이 선택되었는지 확인할 수 있도록 추가 기능이 있습니다 . 필요한 경우 모든 내용을 한 줄에 넣을 수 있습니다.
for x in *.CR2 ; do [ -e "${x%.CR2}.jpg" ] || echo rm "$x"; done
그리고 대화형으로 쉽게 편집할 수 있습니다.
일부 쉘에는 이를 수행할 수 있는 보다 강력한 매개변수 확장 기능이 있지만 Bash는 그중 하나가 아닙니다. 당신이 찾은 코드는 다음 중 하나에 대한 것 같습니다.