2017-10-08 4 views

Répondre

1

Pas très efficace, en raison de l'invocation sh pour chaque fichier, mais cela devrait fonctionner, et est sûr:

find path -type f -name '..*' -execdir sh -c 'fn=$1; dots=${fn%%[^.]*}; cleaned=${fn:${#dots}}; mv -nv "$fn" "$cleaned"' -- {} \; 

Comment ça marche:

  • Trouver les fichiers commençant par au moins 2 points.
  • Exécuter un sh (avec une séquence de commandes) dans le répertoire du fichier, en passant le nom de fichier en tant que paramètre (sh -c '...' -- {})
  • Stocker le nom de fichier dans fn
  • magasin le préfixe de points dans dots
  • Calculer la nouveau nom de fichier en tant que sous-chaîne de fn, en commençant après la longueur de dots
  • Execute mv
+0

N la glace. Mais je recommande d'utiliser 'mv -n' ou' -i' pour éviter d'écraser accidentellement des fichiers existants portant le même nom. –

+0

@GordonDavisson bonne idée, merci! – janos