Comment déplacer des nombres dans des noms de fichiers, lors d'une opération de renommage par lots?

13

J'ai essayé de comprendre comment renommer des fichiers au cours des dernières heures.

J'ai 2000 fichiers qui ressemblent à ceci:

file.1.pdb
file.2.pdb
file.3.pdb

Je voudrais renommer ces fichiers en quelque chose comme:

file.pdb.1
file.pdb.2
file.pdb.3
user812758
la source
Vous ne vouliez pas dire bash ?
avazula
4
@avazula Non, veuillez lire cet article: en.wikipedia.org/wiki/Batch_renaming
Ali Razmdideh
@PerlDuck yes;)
Ali Razmdideh
2
Hé chers électeurs - pensez-vous vraiment que nous n'avons besoin que d'une seule question dans la balise [batch-rename]? Y a-t-il quelque chose dans le message lié qui aide réellement à la tâche dans cette question, à l'exception de l'idée d'utiliser rename? Il me semble que si une question de changement de nom de lot contient des détails spécifiques, nous devons simplement y fournir des réponses spécifiques .
Zanna

Réponses:

15

Si vous avez renameinstallé, vous pouvez utiliser

rename -n 's/(\.\d+)\.pdb$/.pdb$1/' *.pdb   # just watch what WOULD happen
rename    's/(\.\d+)\.pdb$/.pdb$1/' *.pdb   # actually rename the files

La commande renamepeut être installée via

sudo apt install rename
PerlDuck
la source
11

Grâce à mmv(renommer plusieurs fichiers par des motifs génériques), c'est très simple:

mmv '*.*.*' '#1.#3.#2' *.pdb

ou zmvde zshcoquille; c'est un module qui permet de faire renommer; voir Exemples ZMV :

zmv -w '*.*.*' '$1.$3.$2' *.pdb
αғsнιη
la source
3
Les deux mmvet zmvme semblent plutôt exotiques. Cela vous dérange d'élaborer un peu ce qu'ils sont et ce qu'ils font?
PerlDuck
2
J'ai ajouté des liens vers leur page de manuel et des exemples.
αғsнιη
mmvest assez cool. Semble mieux adapté à ce type de changement de nom que rename, bien qu'il soit moins flexible en termes de correspondance de noms.
JAB
11

Utilisation de Perl rename:

rename -n 's/(\.\d+)(\.pdb)/$2$1/' *.pdb

Explication rapide:

  • *.pdbCorrespond à tous les fichiers se terminant par .pdb. (Fait par la coquille)
  • (\.\d+)Faites correspondre un point littéral, puis un ou plusieurs chiffres décimaux. Les parens créent un groupe de correspondance.
  • $2$1 Inversez les premier et deuxième groupes de correspondance.
  • -nAucune action (simuler). Si la sortie semble bonne, réexécutez la commande sans cet indicateur.
wjandrea
la source
1
LOL. Même pensée. Tu as été 48 secondes plus rapide.
PerlDuck
1
@PerlDuck Lol, oui, même pensée. Les réponses se complètent très bien aussi: vous couvrez l'installation, je couvre la syntaxe.
wjandrea
7

Vous pouvez utiliser ce script:

for i in `seq 1 2000`; do
mv file.$i.pdb file.pdb.$i
done

Ou cette commande conviviale copier-coller:

for i in `seq 1 2000`; do mv file.$i.pdb file.pdb.$i; done

Pour utiliser les commandes ci-dessus, placez tous les 2000 fichiers dans un dossier, puis ouvrez le terminal dans ce répertoire, puis exécutez la commande ci-dessus.

Ali Razmdideh
la source
5

Nautilus, le gestionnaire de fichiers par défaut, a récemment reçu une boîte de dialogue de renommage par lots. Il n'est pas encore assez puissant pour faire ce que vous voulez. Mais heureusement, il existe Thunar, un gestionnaire de fichiers alternatif qui peut être installé. Avec la boîte de dialogue Renommer Thunars, vous pouvez faire ce que vous voulez en utilisant l'interface graphique.

Installez d'abord thunar:

sudo apt install thunar

Démarrez thunar, accédez au répertoire contenant vos fichiers. Sélectionnez-les ensuite tous. Appuyez sur F2.

Dans la boîte de dialogue qui s'ouvre, sélectionnez à nouveau tous les fichiers. Changez le mode en «Rechercher et remplacer» et en «Nom et suffixe». Cochez "Expression régulière". Utilisez maintenant ce qui suit comme modèles de recherche et de remplacement:

file\.(.+)\.pdb

et

file.pdb.$1

Enfin, cliquez sur le bouton renommer.

L'avantage de cette méthode est que vous obtenez un aperçu visuel de ce qui se passera avant de procéder au changement de nom.

Thunar rename dialog

Sebastian Stark
la source
1
Vous pouvez faire en sorte que la plupart des programmes impriment des messages en anglais en préfixant la commande avec LC_MESSAGES=POSIX, par exemple LC_MESSAGES=POSIX free. Fonctionne de la même manière pour les applications graphiques bien que dans le cas d'applications persistantes comme Nautilus dans sa configuration par défaut, vous devez d'abord terminer l'instance précédente nautilus -q.
David Foerster
@DavidFoerster merci d'avoir mentionné, image remplacée.
Sebastian Stark
3

Vous pouvez utiliser renamefrom util-linuxpour cela (la commande est appelée rename.uldans ubuntu):

rename.ul .pdb '' *
rename.ul "file." "file.pdb." *

Cela supprime d'abord l' .pdbextension de la fin, puis la réinsère au milieu.

user812791
la source
1
Plutôt cool. Je n'étais pas au courant rename.ul. La syntaxe est un peu, euh, inattendue, mais elle fonctionne en fait comme vous le faites de la publicité. Le plus: il a également un -ninterrupteur (ne touchez pas, dites simplement).
PerlDuck