6 votes

Renommer de manière récursive tous les fichiers dont le nom commence par un tiret

Dans le terminal, je peux renommer un seul fichier qui commence par un tiret, c'est-à-dire

mv ./-fichier fichier

Je peux également renommer tous les fichiers dans un répertoire commençant par un tiret, c'est-à-dire

for f in ./-*; do rename 's/-//' "$f"; done

Cependant, comment puis-je le faire de manière récursive. J'ai essayé d'utiliser la commande find, la commande rename, et une boucle for récursive. Au fait, beaucoup de noms de fichiers contiennent plus d'un tiret. Je voudrais uniquement supprimer le premier tiret. Merci!

11voto

muru Points 180007

En utilisant find et rename :

find . -iname '-*' -execdir rename -n 's:./-:./:' {} +

find . -iname '-*' correspond à tous les noms de fichiers commençant par un -, puis -execdir ... {} + exécute la commande avec ces noms de fichiers comme arguments, après s'être déplacé dans le répertoire contenant les fichiers. Cela signifie que les arguments de la commande ont toujours des noms de fichiers de la forme ./-foo. Ensuite, il est facile de simplement faire correspondre le - après le ./ dans une expression régulière.

2voto

nairoby Points 21

Je suppose que cela devrait fonctionner aussi

pour i in $(find . -iname '-*') ; faire mv $i $(echo $i | sed -e "s/-//"); fin

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