Comment renommer un fichier dans un dossier à l'aide d'une commande shell?

8

J'ai un dossier à some/long/path/to/file/myfiel.txt.

Je veux le renommer some/long/path/to/file/myfile.txt.

Actuellement, je le fais par mv some/long/path/to/file/myfiel.txt some/long/path/to/file/myfile.txt, mais taper le chemin deux fois n'est pas terriblement efficace (même avec la tabulation terminée).

Comment puis-je faire cela plus rapidement? (Je pense que je peux écrire une fonction pour changer le segment de nom de fichier uniquement, mais c'est le plan B).

Leonid Shevtsov
la source

Réponses:

11

Pour ce faire en une seule commande, vous pouvez simplement le faire:

mv some/long/path/to/file/{myfiel.txt,myfile.txt}

Ce qui est un exemple pour le nom de fichier complet, étant donné que c'est une faute de frappe, vous pouvez faire quelque chose comme:

mv some/long/path/to/file/myfi{el,le}.txt

Les deux seront étendus à la commande complète, ceux-ci sont appelés extensions d'accolade . Ils sont pris en charge par zsh .

Tamara Wijsman
la source
Oh mon Dieu, cela ouvre tellement de possibilités. Merci!
Leonid Shevtsov
5

Voici plusieurs options:

Accédez au répertoire:

cd /home/long/path
mv file1 file2
cd -

Modifiez les répertoires à l'aide de la pile de répertoires:

pushd /some/long/path
mv file1 file2
popd

Accédez au répertoire à l'aide d'un sous-shell:

( 
  cd /some/long/path
  mv file1 file2
)   # no need to change back

Utilisez l'expansion de l'accolade:

mv /some/long/path/{file1,file2}

Utilisez une variable:

D=/some/long/path
mv "$D/file1" "$D/file2"
tylerl
la source
Attention, la dernière approche se casse lorsque le chemin a un espace, beter le cite.
slhck
@slhck TOUTES les approches se cassent si vous avez des espaces.
tylerl
1
Non, si vous les saisissez correctement, ils ne le feront pas. Seule la variable une fois développée ressemblera à plusieurs arguments pour mv
slhck
@slhck vous y allez.
tylerl
3

Accédez au répertoire, déplacez le fichier et revenez au répertoire précédent; ainsi:

cd some/long/path/to/file
mv myfiel.txt myfile.txt
cd -
Yedric
la source
1

Quand j'utilise la méthode du sous-shell, j'ai tendance à le faire sur une seule ligne comme ça

(cd /some/long/path ; mv myfiel myfile )
Keith Wolters
la source