web-dev-qa-db-fra.com

Explication claire de la syntaxe de la commande rename

Je dois être sévèrement obtus, car même après avoir lu le nom de l'homme à renommer et des tonnes de scripts donnés en exemple sur d'autres forums, je ne parviens toujours pas à comprendre ce que la syntaxe de la commande rename signifie réellement.

J'essaie d'apprendre des commandes bash, et je réalise à quel point il est dangereux de simplement copier et exécuter des commandes à partir d'Internet sans vraiment comprendre ce qui est fait et, plus important encore, pourquoi ils "font ce qu'ils font". Alors, quelqu'un peut-il m'aider à comprendre ce que signifient les termes de la commande de changement de nom, de sorte que je puisse créer ma propre commande de travail et précise?

Pour plus de précisions, j'ai téléchargé plus de 40 vidéos youtube dans le même répertoire et elles se terminent toutes par -fgrhegrvbfv (chacune d'entre elles comporte des caractères totalement aléatoires après le -). Je souhaite simplement supprimer le - et les 12 caractères qui le suivent dans chaque nom de fichier. Merci beaucoup!

2
Turp

Le premier paramètre est un extrait de code Perl qui transforme l'ancien nom (dans $_) en un nouveau. Les autres paramètres sont les fichiers à utiliser. Dans votre cas, vous feriez ceci:

rename 's/-.{12}$//' *
2
Joseph Sible

Voici une façon de le faire:

$ ls
file2-fdsa  file-asdf
$ prename -nv  's/(.*)-(.*)/$1/' *-*                  
file-asdf renamed as file
file2-fdsa renamed as file2

La façon dont cela fonctionne est que nous avons deux "groupes" de caractères correspondants. Ainsi, le premier (.*) sera ce qui est avant - et le second (.*) sera ce qui sera après -. On peut s'y référer via $1 pour le groupe 1 et $2 pour le groupe 2 (non utilisé).

Le *-* indique au shell de prendre tous les fichiers contenant - et de les transmettre en tant qu'arguments à la commande rename. Cette partie n'a rien à voir avec rename elle-même, mais avec le shell. Cela rend notre vie un peu plus facile.

La commande entière peut maintenant être lue: "Prenez tous les fichiers qui contiennent - et, pour chaque nom de fichier, divisez-les en deux groupes et renommez ce fichier uniquement dans le premier groupe".

Notez quelques choses:

  • le drapeau -n est utilisé pour effectuer uniquement des essais à sec. Supprimez cet indicateur si vous souhaitez effectuer l'action.
  • le drapeau -v est utilisé pour obtenir une sortie commentée de ce que prename est en train de faire
  • prename est identique à rename. Il y a un peu de gâchis avec les paquets Debian et ce qui est maintenu. Voir this pour plus d'informations. Notez que certains shells comme ksh ont leur propre commande intégrée rename qui fonctionne différemment du changement de nom de Perl.
0