J'ai essayé de marquer tardivement une question similaire à la mienne (Find Non-UTF8 Filenames on Linux File System) pour obtenir d'autres réponses, sans aucune chance jusqu'à présent, donc ici va à nouveau ...Utilisation de find ou grep pour localiser des noms de fichiers avec des caractères accentués d'un système d'encodage différent (Windows vers Linux)
J'ai le même problème que l'OP dans le lien ci-dessus et convmv est un excellent outil pour réparer son propre système de fichiers. Ma question est donc académique, mais je trouve insatisfaisant (en fait je ne peux pas croire) que "trouver" ne soit pas capable de trouver des caractères ascii non standard. Y a-t-il quelqu'un là-bas qui connaîtrait la combinaison d'options à utiliser pour trouver les noms de fichiers qui contiennent des caractères non standard sur ce qui semble être un FS unicode, dans mon cas les caractères semblent être 8bits étendus ascii plutôt qu'unicode, les fichiers proviennent d'une machine Windows (iso-8859-1) et j'ai régulièrement besoin de les récupérer. J'aimerais voir comment trouver et/ou grep peut faire la même chose que convmv.
Exemples de fichiers:
> ls
Abc�def ÉÈéèáà-rest everest éverest
> ls -b
Abc\251def ÉÈéèáà-rest everest éverest
Premier fichier provient de Windows (ou simulé avec touch $(printf "Abc\xA9def")
). Manquant presque tous (le trait d'union a enregistré ce fichier, peut être vu avec grep coloré). Tout ce qui se passe ici n'est pas ce à quoi je m'attendais: ni find ni grep ne peuvent prendre une lettre accentuée comme étant en dehors de la plage fournie [^ a-zA-Z. /]. Bizarrement tous les deux sont capables de prendre un accent standard lorsqu'ils sont fournis (y compris dans la gamme). Tout essai find ou grep avec \ xA9, \ 0251 ou \ o251 échoue (aucune correspondance). Recherche d'un caractère non controversé montre tous les fichiers avec grep, comme je m'y attendais.
> find . -regex '.*e.*'
./éverest
./ÉÈéèáà-rest
./everest
> find . -name '*e*'
./éverest
./ÉÈéèáà-rest
./everest
trouver, cependant, est très discriminatoire: même regardant un caractère normal, il me semble qu'il élimine les noms de fichiers contenant des caractères en dehors de la plage de caractères acceptables pour le schéma de codage du nom du système de fichiers.
En ce qui me concerne si le fichier est dans le système de fichiers, alors trouver devrait le trouver, non? Mais peut-être qu'il y a une fonctionnalité que je ne connais pas?
Toute idée serait très appréciée.
double possible de [(grep) Regex pour correspondre à des caractères non-ascii?] (Http://stackoverflow.com/questions/2124010/grep-regex-to-match-non-ascii-characters) – marcog
J'ai vu des choses vraiment désagréables arriver aux systèmes de fichiers en raison d'idées contradictoires sur l'encodage des noms de fichiers.Je ne pense pas que la simple recherche de non-ASCII aborde vraiment cela très bien non plus, car il y a trop d'autres problèmes qui se cachent sur les bords. Il n'y avait rien sur Superuser à ce sujet? – tchrist
@marcog: certainement pas un doublon. @tchrist: J'ai posté la même question à Superuser et Jander est revenu avec une réponse, voir ma propre réponse à ce post. – asoundmove