find . -printf "%p %f\n" | sort -f -k2 | uniq -Di -f1
Especifique sua opção de iniciar o diretório para find
se você não quiser começar em .
.
Adicione -type f
se você quiser apenas nomes de arquivo .
- O comando
find
produz uma lista de nomes de arquivos (e diretórios), em ordem de diretórios (ou seja, ordem aleatória, até onde você sabe). -
-printf "%p %f\n"
imprime o nome do caminho completo (relativo a.
) e o nome do arquivo. -
sort -f
é a abreviação desort --ignore-case
, ou seja, classifica a lista de nomes de arquivos de uma maneira que não diferencia maiúsculas e minúsculas -
-k2
diz para usar o segundo campo como a chave de classificação. -
uniq -Di -f1
é a abreviação deuniq --all-repeated --ignore-case --skip-fields=1
, isto é, mostra (todas) as linhas de saída defind
que ocorrem repetidamente, com base na comparação de maiúsculas e minúsculas do segundo campo e além (ou seja, que têm o mesmo -insensível) nome do arquivo).
Isso deve dar a saída que você deseja, exceto que cada linha terá o nome do arquivo repetido no final. Se você quiser se livrar disso, canalize para sed 's/ .*//'
.
Algumas dicas:
-
Se você tiver diretórios cujos nomes são os mesmos, exceto caso, e eles contêm arquivos cujos nomes são os mesmos, exceto caso, por exemplo,
documents/design.doc Documents/Design.doc
eles serão listados.
-
Se você tiver arquivos (ou diretórios) cujos nomes contenham espaços, tabulações ou novas linhas, isso será interrompido.