web-dev-qa-db-fra.com

Supprimer les n derniers caractères des noms de fichiers pour tous les fichiers d'un répertoire

Comment puis-je supprimer les 12 derniers caractères des noms de fichiers de tous les fichiers d'un répertoire donné via Terminal?

4
Markus Gratis

Utilisation de l’expansion du paramètre bash:

for i in ?????????????*; do echo mv -i "$i" "${i%????????????}"; done

supprimez echo pour l'action réelle. Recherchez le même nom de fichier de sortie pour plusieurs fichiers source.

Vous pouvez également utiliser un modèle de remplacement d’extension de paramètre:

for i in ?????????????*; do echo mv -i "$i" "${i/????????????}"; done

En utilisant rename (prename), à partir de ce répertoire:

rename -n 's/.{12}$//' *

Ceci renommera tous les fichiers et répertoires, si vous voulez le faire uniquement pour les fichiers:

find . -maxdepth 1 -type f -name '?????????????*' -exec rename -n 's/.{12}$//' {} +

Ceci fonctionnera à sec, supprimez -n pour l'action réelle:

find . -maxdepth 1 -type f -name '?????????????*' -exec rename 's/.{12}$//' {} +

Là encore, cela pourrait provoquer une situation critique, assurez-vous de bien vérifier la sortie du fonctionnement à sec.

5
heemayl

Vous pouvez utiliser rename. Depuis l'intérieur du répertoire:

rename -n 's/(.*).{12}/$1/' *

Supprimez -n après le test pour renommer les fichiers. Remplacez {12} par {whatever number of characters you want to delete from the end of the name}

Explication

  • s/old/new/' replaceoldwithnew`
  • (.*) enregistrer n'importe quel nombre de caractères ...
  • .{12} les douze derniers caractères, quels qu'ils soient
  • $1 les caractères enregistrés avec ()
3
Zanna