web-dev-qa-db-fra.com

Renommez récursivement tous les fichiers dont le nom commence par un tiret

Dans le terminal, je peux renommer un seul fichier commençant par un tiret, c.-à-d.

mv ./-file file

Je peux également renommer tous les fichiers d’un répertoire commençant par un tiret, c.-à-d.

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

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

5
jbrock

Utiliser find et rename:

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

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

10
muru