Comment find les noms de files / directorys qui sont identiques, mais avec des majuscules / cas différents?

Comment puis-je listr les noms de files / directorys dans un directory récursivement identiques mais avec des majuscules / cas différents? ex.:

INPUT (pas la command ls , les directorys):

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

SORTIE:

 /b/ize 

Si vous avez GNU uniq , vous pouvez sortinger la casse ( -i ) et utiliser -d pour n'imprimer que des lignes en double:

 find . | sort -f | uniq -di 

Comme @StephaneChazelas l'a mentionné dans sa réponse , cela peut ne pas faire ce que vous attendez si vous pouvez avoir des paths dupliqués qui ne diffèrent que dans le cas (comme a/b/foo et A/b/foo ).

En supposant que les noms de file ne contiennent pas de caractères de nouvelle ligne, vous pouvez faire quelque chose comme:

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

Notez que certaines implémentations de tr comme GNU tr ne changent pas le cas des caractères multi-octets.

Notez également que le path qu'il rapporte peut ne pas être le path d'access d'un file. Par exemple, s'il y a un ./a/b/fOo et un file ./A/b/fOo , il signale ./a/b/foo . Si ce n'est pas ce que vous voulez, vous voudrez peut-être affiner vos exigences.

Toutes ces idées sont mauvaises. Utilisez des sums de contrôle et assurez-vous que les files sont identiques. Alors la tâche devient facile.

 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}}' 

Cela permettra de sha1sum chaque file dans le directory et tous les sous-directorys et de sortir tous les dupes de ce file, s'il y en a. J'ai fait le pipeline multiligne pour la lisibilité.