JPG 파일이 없는 모든 RAW 이미지 파일(사진 이미지)을 삭제하고 싶습니다.
내 현재 작업 흐름은 다음과 같습니다.
- 내 카메라는 내가 찍는 모든 사진에 대해 RAW와 JPG를 생성합니다.
- JPG 파일을 보고 필요하지 않은 파일을 삭제합니다(JPG가 훨씬 빠르게 로드되기 때문).
- 저는 현재 폴더를 수동으로 살펴보고 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
.