JPG 대응물이 없는 RAW 이미지 파일 삭제

JPG 대응물이 없는 RAW 이미지 파일 삭제

JPG 파일이 없는 모든 RAW 이미지 파일(사진 이미지)을 삭제하고 싶습니다.

내 현재 작업 흐름은 다음과 같습니다.

  1. 내 카메라는 내가 찍는 모든 사진에 대해 RAW와 JPG를 생성합니다.
  2. JPG 파일을 보고 필요하지 않은 파일을 삭제합니다(JPG가 훨씬 빠르게 로드되기 때문).
  3. 저는 현재 폴더를 수동으로 살펴보고 JPG 쌍이 없는 RAW 파일(제 경우에는 *.cr3)을 선택합니다(검토 과정에서 JPG를 삭제했기 때문입니다).

파일을 보기 전의 파일 모양 예:

IMG_001.JPG
IMG_001.CR3
IMG_002.JPG
IMG_002.CR3
IMG_003.JPG
IMG_003.CR3
IMG_004.JPG
IMG_004.CR3

파일을 검토한 후 파일이 어떻게 보이는지에 대한 예

IMG_001.JPG
IMG_001.CR3
IMG_002.CR3
IMG_003.JPG
IMG_003.CR3
IMG_004.CR3

IMG_002와 IMG_004 모두 jpg 파일이 없습니다. 즉, jpg 파일을 삭제했고 이제 원본 파일을 삭제하고 싶습니다.

나는 조언을 따르려고 노력한다.여기: 그리고여기: 하지만 소용없어요.

이것은 내 현재 코드입니다.

for files in RAW/* 
do 
test="JPG/$(basename ${files::9})JPG"
if [ ! -f "$test" ]
then echo "$files"
fi 
done

또는 유창한 한 줄 버전:

for files in RAW/*; do if [ ! -f "JPG/$(basename ${files::9})JPG" ]; then echo "$files"; fi done

또는 다른 라이너:

For files in RAW/*; [ ! -f "JPG/$(basename ${files::9})JPG" ] && echo "JPG/$(basename ${files::9})JPG"

코드에서는 raw 파일과 jpg 파일이 서로 다른 폴더에 있다고 가정합니다. 이는 문제가 없습니다. 하지만 같은 폴더에 두는 것이 조금 더 편리합니다.

기본적으로 이 스크립트를 작성하는 방법을 알고 싶습니다. 저는 Mac OSX 15 Catalina에서 터미널을 사용하고 있습니다.

답변1

파일이 동일한 디렉토리에 있으므로 간단하게 유지하겠습니다.

#!/bin/sh
for file in *.CR3; do
    noext=${file%.CR3}
    [ -f "$noext.JPG" ] || rm -- "$file"
done

.CR3이 스크립트는 현재 디렉터리의 모든 파일을 반복합니다 . 파일 이름에서 확장자를 제거합니다 noext=${file%.CR3}. .JPG해당 항목이 없으면 .CR3파일이 삭제됩니다( [ -f "$noext.JPG" ] || rm -- "$file).

echo실제로 스크립트를 실행하기 전에 올바르게 수행되었는지 확인하려면 와 사이에 하나를 추가 해야 할 수도 있습니다 .||rm

답변2

파일이 작성한 대로라면 다음을 통해 필요한 모든 파일을 찾을 수 있습니다.

\ls -1 *.JPG *.CR3 | cut -d. -f1 | uniq -c | sed '/\<2\>/d
s/^[^I]*\(.*\)/\1.CR3/'

삭제하세요. 완전한 명령은 다음과 같습니다

rm $(\ls -1 | cut -d. -f1 | uniq -c | sed '/\<2\>/d
s/^[^I]*\(.*\)/\1.CR3/')

실제로 각 파일의 기본 이름을 가져와서 count로 cut보내고 uniq -c, 2개의 인스턴스가 있는 모든 파일을 삭제한 다음, 1개의 인스턴스를 삭제하고 확장자를 추가하여 이 작업을 수행할 수 있습니다 CR3.

관련 정보