동일한 파일/디렉토리 이름이지만 대소문자가 다른 방법을 찾는 방법은 무엇입니까?

동일한 파일/디렉토리 이름이지만 대소문자가 다른 방법을 찾는 방법은 무엇입니까?

디렉토리에 동일한 파일/디렉터리 이름을 다른 대소문자로 재귀적으로 나열하는 방법은 무엇입니까? 전임자. :

입력( ls명령, 디렉터리 아님):

[user@localhost ~/a] ls -R
.:
b

./b:
ize  Ize

./b/ize:

./b/Ize:
[user@localhost ~/a] 

산출:

/b/ize

답변1

GNU가 있는 경우 대소문자를 구분하지 않고( ) 정렬하고 중복된 줄만 인쇄할 uniq수 있습니다 .-i-d

find . | sort -f | uniq -di

@StephaneChazelas가 그의 기사에서 언급했듯이답변a/b/foo, 대소문자만 다른 중복 경로가 있는 경우(예: 및 ) A/b/foo예상한 대로 작동하지 않을 수 있습니다 .

답변2

파일 이름에 개행 문자가 포함되어 있지 않다고 가정하면 다음을 수행할 수 있습니다.

find . | tr '[:upper:]' '[:lower:]' | sort | uniq -d

일부 tr구현(예: GNU) 은 tr멀티바이트 문자의 대소문자를 변경하지 않습니다.

또한 보고되는 경로는 파일 경로가 아닐 수도 있습니다. 예를 들어, ./a/b/fOo./A/b/fOo파일이 있는지 보고합니다 ./a/b/foo. 이것이 원하는 것이 아니라면 요구 사항을 구체화해야 할 수도 있습니다.

답변3

이런 생각은 모두 나쁜 것입니다. 체크섬을 사용하여 파일이 동일한지 확인하세요. 그러면 작업이 쉬워집니다.

find . -type f -exec md5sum {} + |
sort |
perl -a -nE'push(@{$db{$F[0]}},$F[1]);END{for(keys%db){say"Dupe detected @{@db{$_}}"if scalar@{$db{$_}}>1}}'

이는 디렉터리와 모든 하위 디렉터리의 모든 파일을 sha1합계하고 해당 파일의 모든 중복 파일(있는 경우)을 출력합니다. 가독성을 위해 파이프를 여러 줄로 설정했습니다.

관련 정보