Comment trouver tous les fichiers d'une arborescence de dossiers ne contenant aucun caractère alphanumérique

3

J'ai repris de quelqu'un d'autre beaucoup de données historiques. Cependant les noms de fichiers sont totalement aléatoires et mal formatés à mon humble avis.

Pour commencer, je souhaite obtenir une liste de tous les fichiers contenant des espaces ou de tout caractère autre que AZ, 0-9,., -, _ y a-t-il moyen de faire cela avec la syntaxe regex à partir de la ligne de commande sous Linux?

StephenTrapped
la source

Réponses:

2
find . -type f | grep -i '[^a-z0-9\.\/_\-]'

Cela correspond à tous les fichiers contenant un caractère autre que a-z, 0-9un point, une barre oblique (pour les répertoires), un trait de soulignement ou un tiret moins.

Remarque: cela ne fonctionnera pas si un fichier (ou un chemin) contient une nouvelle ligne, car la canalisation vers grepdiviserait le chemin du fichier en deux. Bien que pas vraiment commun, il convient de le mentionner.


Une solution simple avec Zsh (cela nécessite setopt EXTENDED_GLOB):

ls -l **/*[^a-zA-Z0-9-_.]##*

Le **rechute dans des répertoires et *correspond à zéro ou plusieurs occurrences de n'importe quel caractère. Le modèle négatif de caractères de la liste blanche doit être mis en correspondance au moins une fois ( ##).

slhck
la source
0

Si vous avez la commande de localisation, vous pouvez faire quelque chose comme ceci:

locate --basename --regex "[^0-9A-Za-z\.\_\-]"

Dans les systèmes centos, vous pouvez installer localiser en exécutant yum -y install updatedb. Vous devrez ensuite exécuter la commande updatedb, puis localiser.

Dans cette commande, les forces de base relatives au nom de fichier recherchent uniquement le nom du fichier, et non le chemin de répertoire complet, et regex exécute le fichier expr expr sur ce nom de fichier.

Gevork Palyan
la source
-1

Cela mettra en évidence les fichiers étranges mais ne les imprimera pas uniquement:

trouver . -type f -maxdepth 1 | grep --color = 'auto' [[: alnum:]]

Bogdan
la source
Les espaces (et autres) font partie d’ASCII.
Slhck
La question dit: «Trouver tous les fichiers dans une arborescence de dossiers» –– alors pourquoi avez-vous ajouté -maxdepth 1?
Scott