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).

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 .


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"

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 -

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 )
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.