비슷한 이름의 파일 찾기

비슷한 이름의 파일 찾기

저는 OS X 10.7.3을 실행하고 있습니다. 파일 이름에 공통 문자열이 있는 모든 파일을 찾고 싶습니다.

접두사를 제외하고 파일 이름이 동일한 여러 파일이 포함된 폴더가 있습니다. 예를 들어:

003 - 일식.mp3
008 - 아름다운 날.mp3
027 - 일식.mp3
103 - 롤링힐.mp3
244 - 롤링힐.mp3

해당 목록에서 "완전히 고유한" 이름을 가진 항목을 필터링하고 싶습니다. 이 경우에는 008 - Beautiful Day.mp3입니다.

이를 수행하는 GUI 클라이언트, 자동화 스크립트 또는 터미널 명령이 있습니까?

정말 감사합니다!

답변1

ls | cut -b 6- | sort | uniq -c | sort -r

이렇게 하면 접두사가 잘리고 파일이 "중복"된 횟수가 표시됩니다.

답변2

그러면 접두어 없이 파일 이름 목록이 인쇄됩니다.

awk -F ' - ' '{counts[$2]++; names[$0]} END {for (item in counts) {if (counts[item] > 1) {print item}}}' < <(printf '%s\n' *)

예제 출력:

Solar Eclipse.mp3
Rolling Hills.mp3

각 파일의 전체 파일 이름을 인쇄하려면:

awk -F ' - ' '{counts[$2]++; names[$0]} END {for (name in names) {split(name, parts, / - /); if (counts[parts[2]] > 1) {print name}}}' < <(printf '%s\n' *)

예제 출력:

027 - Solar Eclipse.mp3
003 - Solar Eclipse.mp3
244 - Rolling Hills.mp3
103 - Rolling Hills.mp3

출력의 파일 순서가 그룹화된다는 보장은 없습니다(이 간단한 예에도 불구하고). GNU AWK( gawk)가 있는 경우 출력을 그룹화할 수 있습니다.

awk -F ' - ' '
    {
        counts[$2]++;
        names[++c] = $2 " - " $1
    }
    END {
        num = asort(names);
        for (i = 1; i <= num; i++) {
            split(names[i], indices, / - /)
            if (counts[indices[1]] > 1) {
                print indices[2] " - " indices[1]
            }
        }
    }
' < <(printf '%s\n' *)

가 없으면 다음을 gawk사용할 수 있습니다 sort.

awk ... | sort -k3,3

프로세스 대체를 사용하는 대신 printf이를 AWK 스크립트로 파이프할 수 있습니다. 또는 find이 작업을 재귀적으로 수행하려는 경우 파이프에서 사용하거나 프로세스 대체를 사용할 수 있습니다 . 재귀 실행을 통해 파일 이름을 전역적으로 비교하려면 기본적으로 출력되는 디렉터리 이름을 제거해야 합니다 find.

관련 정보