Comment supprimer des caractères des noms de fichiers d'un dossier?


0

J'ai une liste de fichiers dans un répertoire, mais certains d'entre eux ont des caractères étranges dans le nom. Comment puis-je renommer uniquement ces fichiers pour supprimer ces caractères?

Le système d'exploitation de l'ordinateur est Red Hat, jeu de caractères UTF-8.

Liste de fichiers


Est-ce vraiment un personnage étrange ou un point d'interrogation?
Paul

Réponses:


2

Essayez de désintoxication. De la page de manuel:

Nom

detox - nettoie les noms de fichiers

Synopsis

detox [-hnLrv] [-s -sequence] [-f -configfile] [--dry-run] [--special] fichier ...

La description

L'utilitaire de désintoxication renomme les fichiers pour faciliter leur travail. Il supprime les espaces et autres inconvénients de ce type. Il va également traduire ou nettoyer les caractères Latin-1 (ISO 8859-1) codés en ASCII 8 bits, les caractères Unicode codés en UTF-8 et les caractères d'échappement CGI.

Des séquences

La désintoxication est pilotée par une série configurable de filtres, appelée séquence. Les séquences sont traitées plus en détail dans detoxrc (5) et peuvent être découvertes avec l'option -L. Iso8859_1 et utf_8 sont des exemples de séquences par défaut.

Il est disponible dans les référentiels RHEL 6, la dernière fois que j'ai vérifié. Je ne suis pas sûr de RHEL 7. Avant de procéder au nettoyage, il est conseillé d'utiliser detoxle -ncommutateur (fonctionnement à sec). Par exemple: detox -rn /somedir.


Non trouvé dans les dépôts standard et epel Centos 7 .... Trouvé dans RHEL 6. aussi ... dans Fedora 23.
mdpc

0

Si vous ne pouvez pas utiliser detoxou si vous souhaitez davantage de contrôle sur les nouveaux noms de fichier, vous pouvez utiliser des outils standard.

lsavec sortie vers le terminal affiche les caractères non imprimables sous la forme ?. Si le nom affiché (par exemple ab?cd) est unique ( ls ab?cdaffiche un seul fichier), vous pouvez simplement utiliser ce masque dans une mvcommande:

mv ab?cd ab_cd

ls -baffiche les caractères non imprimables sous forme de séquences d'échappement (par exemple ab\001cd), bien que vous ne puissiez pas utiliser le nom affiché dans une autre commande, mais cela vous permet de voir tous les fichiers affectés:

ls -b|grep '\\'     ; # includes names with embedded spaces
ls -b|grep '\\[^ ]' ; # excludes names with embedded spaces

ls avec output dans un fichier ou un tuyau écrit le nom de fichier littéral: dans ce cas, vous pouvez obtenir une liste de noms de fichiers avec des éléments non imprimables avec:

ls|env LC_ALL=C grep '[^!-~]' ; # includes names with embedded spaces
ls|env LC_ALL=C grep '[^ -~]' ; # excludes names with embedded spaces

Vous pouvez maintenant diriger cette sortie vers un script pour effectuer le changement de nom souhaité, comme dans:

ls|env LC_ALL=C grep '[^!-~]'|while l=`line`; do ... ; mv "$l" "$n" ; done

Le code omis consiste à formuler le nouveau nom que $nvous souhaitez. Si vous n'en avez pas line, vous pouvez utiliser à la while read lplace, bien que cela ne fonctionne pas correctement avec les noms de fichiers avec des espaces de début ou de fin.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.