4 votes

Comment supprimer tous les guillemets simples dans tous les fichiers de manière récursive en utilisant `rename` ?

Le titre dit tout et je sais qu'il y a beaucoup de questions similaires, mais la plus proche que j'ai pu trouver était d'enlever " et non '. Ce que j'ai essayé jusqu'à présent est :

find -name "*'*" -type f | rename 's/\'//g'

ou rename 's/[']//g' et quelques autres variantes. Je trouve tous les fichiers, mais lorsque je les envoie à rename Je suis en train d'obtenir > pour la prompte et doivent Ctrl + C pour revenir. J'ai récemment modifié un grand nombre de fichiers avec cette méthode, et elle a fonctionné comme un charme pour tous les caractères spéciaux, à l'exception des guillemets simples.

8voto

Zanna Points 65764

Vous pouvez utiliser des guillemets doubles :

rename -n "s/'//g"

supprimer -n après avoir testé de renommer les fichiers pour de vrai

使用する -exec cependant...

find -name "*'*" -type f -exec rename -n "s/'//g" '{}' \;

Si la liste n'est pas trop longue, accélérez-la...

find -name "*'*" -type f -exec rename -n "s/'//g" '{}' +

Ou, comme suggéré dans les commentaires, utiliser la globalisation récursive Shell :

shopt -s globstar
rename -n "s/'//g" **/*"'"*

Vous pouvez utiliser shopt -u globstar pour transformer la globalisation récursive en ** désactivée, mais elle le sera de toute façon lorsque vous démarrerez un nouveau Shell.

0voto

Tom Russell Points 101

Cela fonctionne avec bash sur mon système (OpenSUSE Leap) :

$ rename "'" '' **

Les 3 args de rename sont : "'" , '' y ** ( globstar ), en lui demandant de remplacer les guillemets par la chaîne vide, et ce de manière récurrente.

Il convient de noter que ** ( globstar ) est activé par défaut sur mon système. Je n'ai pas connaissance d'un moyen de le désactiver.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X