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!
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, aftercd
ing 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.