41 votes

En bash, comment puis-je renommer un fichier sans répéter le chemin ?

Possible Duplicate:
Réutiliser du texte sur une commande bash

If I want to rename a file a few directories deep, how can I avoid repeating the path?

For example:

mv path/to/old_filename.txt path/to/new_filename.txt

I'm wondering if there's a way to make this:

mv path/to/old_filename.txt (?)new_filename.txt

Where (?) would be some way of saying "in the same directory."

63voto

Darth Android Points 36975

Vous pouvez utiliser l'expansion des accolades: mv chemin/vers/{ancien_nom.txt,nouveau_nom.txt}

Ici se trouve un lien vers le guide GNU sur l'expansion des accolades dans le shell bash, qui définit une liste de substituts et indique à bash de répéter le paramètre en utilisant un substitut différent à chaque répétition.

Par exemple,

a{b,c,dd,e}

sera étendu à

ab ac add ae

La seule mise en garde est que les répétitions étendues doivent pouvoir se suivre en tant qu'arguments pour le programme cible.

28voto

henrique Points 101

La réponse de Darth ci-dessus est astucieuse, mais si vous souhaitez utiliser une approche avec cd, vous pouvez également envisager d'utiliser un sous-shell :

(cd chemin/vers && mv ancien_nom_de_fichier.txt nouveau_nom_de_fichier.txt)

Parce que le changement de répertoire se fait dans le sous-shell, vous ne changerez pas réellement de répertoire dans votre shell interactif.

28voto

Abbas Points 3737

En utilisant l'expansion de l'historique bash :

mv chemin/vers/ancienfichier !#:1:h/nouveaufichier

!#:1:h signifie : à partir de la ligne que vous êtes en train de taper ("!#"), prenez le premier mot (":1"), puis prenez uniquement le composant du chemin (":h" -- la tête) de celui-ci.

11voto

Mike Green Points 607

Une autre alternative utile, si vous allez effectuer plusieurs commandes dans le répertoire, est la suivante :

pushd /chemin/vers
mv ancienfichier nouveaufichier
...
popd

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X