이름은 같지만 확장자가 다른 파일을 감지하는 방법은 무엇입니까?

이름은 같지만 확장자가 다른 파일을 감지하는 방법은 무엇입니까?

파일 확장자가 .JPG 또는 .NEF인 디렉터리가 있는데 디렉터리에 X.JPG가 없는 X.NEF 형식의 파일을 삭제하고 싶습니다. (여기서 X는 임의의 문자열이 될 수 있습니다.) 이 작업을 직접 수행하는 것 외에는 방법을 모르겠습니다.

보다 일반적인 상황은 디렉토리 B에도 존재하는 디렉토리 A의 모든 파일을 찾으려는 경우입니다. (첫 번째 문제는 를 사용하여 두 번째 문제로 바꿀 수 있습니다 mmv.)

답변1

쉘의 ${var%ext}매개변수 대체 기능을 사용하여 파일별로 원래 확장자를 제거할 수 있습니다.

touch file{1..6}.NEF file{1,2,4,6}.JPG

그 다음에

for nef in *.NEF; do [[ -f "${nef%.NEF}.JPG" ]] || echo rm -- "$nef"; done

결과

rm -- file3.NEF
rm -- file5.NEF

설명:

첫 번째 명령은 번호가 매겨진 6개의 파일과 그 중 3개에 해당하는 파일을 생성합니다. 즉 .NEF, 두 번째 명령을 테스트하기 위한 빈 파일 몇 개만 생성합니다.file1.NEFfile6.NEF.JPG

관련 정보