GNU/Linux >> Tutoriels Linux >  >> Linux

Comment supprimer les caractères de fin dans les noms de fichiers dans Bash ?

En shell, on pourrait faire simplement :

for x in *]*.avi ; do 
    mv -i "$x" "${x%]*.avi}.avi"
done

Le shell peut produire une liste des noms de fichiers avec juste un glob normal et ${var%pattern} supprime le motif correspondant (le plus court) à la fin de la chaîne dans la variable var . Puisque l'extension finale est toujours .avi , je viens de le retirer avec le motif et de le rajouter. Avec les guillemets, cela devrait également fonctionner avec les noms de fichiers contenant des espaces, comme Fancy Name for a Show.s01e01]Asdf.avi


Cela renommera les fichiers. Vous avez besoin du \w* pour signifier n'importe quel nombre de caractères alphanumériques.

rename 's/\]\w*//' *

Référence :http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards


C'est peu pratique - les autres réponses sont beaucoup plus rapides et plus courtes - mais...

Vous pouvez utiliser PowerShell ! Microsoft l'a récemment ouvert et l'a rendu multiplateforme. Pour les téléchargements et les instructions d'installation pour votre système d'exploitation, consultez la section "Obtenir PowerShell".

Une fois installé, vous pouvez utiliser ce bref script :

Get-ChildItem -File '*]*.avi' | ForEach-Object {
    Rename-Item $_ -NewName (($_.Name -Split ']')[0] + '.avi')
}

Fondamentalement, il parcourt chaque objet du répertoire courant qui est un fichier correspondant à *]*.avi , prend la partie avant la parenthèse, vire .avi de nouveau dessus et l'attribue comme nouveau nom.

Pour l'exécuter directement depuis Bash, utilisez ce one-liner semi-golfé :

powershell -command $'gci -File \'*]*.avi\'|%{rename-item $_ -NewName (($_.Name -Split \']\')[0]+\'.avi\')}'

Citation s'échappant avec l'aimable autorisation de cette réponse Stack Overflow.

(Testé dans Bash sur Ubuntu sous Windows. Il existe probablement une manière beaucoup plus courte de le faire avec PowerShell, mais je voulais montrer quelque chose qui soit compréhensible pour les personnes qui ne connaissent pas les expressions régulières.)


Linux
  1. Comment connaître le nom du fichier de script dans un script Bash ?

  2. Comment nommer un thread sous Linux ?

  3. Comment supprimer des dossiers avec un certain nom

  4. Comment puis-je compter le nombre de caractères dans une variable Bash

  5. Supprimez tous les caractères spéciaux et la casse de la chaîne dans bash

Comment commenter dans Bash

Comment supprimer les caractères (^M) d'un fichier sous Linux

Comment supprimer les espaces des noms de fichiers sous Linux

Comment supprimer tous les espaces blancs d'un fichier texte

Comment exécuter un script bash

Comment supprimer les caractères invalides des noms de fichiers ?