파일 확장자가 .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.NEF
file6.NEF
.JPG