web-dev-qa-db-fra.com

Manière la plus rapide de renommer des fichiers, sans retaper le chemin du répertoire

Je sais comment renommer des fichiers sous Unix:

$ mv ~/folder/subfolder/file.txt ~/folder/subfolder/file.sh

     ^-------this part------^    ^------this part-------^

Il faut trop de temps pour répéter ~/folder/subfolder/file deux fois.

Existe-t-il un moyen plus rapide?

57
Hamed Kamrava

Si votre Shell pris en chargeExpansion de l'accolade (fonctionne avec csh, tcsh, ksh, zsh , bash, mksh, lksh, pdksh, yash avec accolade-expand activé en appelant yash --brace-expand ou défini dans Shell interactif avec set -o brace-expand ou fish):

mv ~/folder/subfolder/file.{txt,sh}
106
cuonglm

Vous pouvez également utiliser rename (partie du paquet util-linux).

rename .txt .sh ~/folder/subfolder/file.txt

Voir renommer la page de manuel pour plus de détails.

21
jofel

Tout ce qui précède est bon. Cela fonctionnerait également:

( cd ~/folder/subfolder && mv file.txt file.sh )
10
Bjorn

Non. Vous devez indiquer le chemin d'accès complet au fichier pour le renommer. La seule alternative est de se déplacer dans le dossier cible avant d'exécuter le mv:

cd ~/folder/subfolder/
mv file.txt file.sh

Alternativement, vous pouvez écrire une petite fonction qui renomme le fichier dans le répertoire cible. Par exemple, ajoutez ces lignes à votre fichier d'initialisation Shell (~/.bashrc si vous utilisez bash):

lmv(){
    _path=$(dirname -- "$1")
    _target="${_path%/}/$2"
    mv -- "$1" "$_target"
}

Ensuite, ouvrez un nouveau terminal ou exécutez simplement source ~/.bashrc pour relire le fichier init et vous pouvez faire:

lmv ~/folder/subfolder/file.txt file.sh
6
terdon

Juste pour étendre l'utilité de la réponse de cuonglm (NE PAS prendre le crédit car j'aime sa solution) et sa réponse est correcte.

Le cas d'utilisation est que nous voulons souvent mv un fichier dans un emplacement distant (le vrai problème), par exemple /folder/subfolder/configFile.dat TO configFile.dat.orig

Cette forme de la commande ajoute une extension de fichier (ne remplace pas l'extension d'origine)

mv ~/folder/subfolder/file.txt{,.orig}

Expliqué: "{, .orig}" signifie remplacer (rien) à la fin du nom de fichier par (quelque chose) ".orig"

OU à supprimer une extension de fichier (inverser le changement de nom)

mv ~/folder/subfolder/file.txt{.orig,}

Remarque: Toujours sur le sujet pour "le moyen le plus rapide de renommer des fichiers sans retaper le chemin dir"

2
spikendu

Oui. Si vous utilisez bash, vous faites Sudo pushd ~/folder/subfolder/ && Sudo mv ./file.txt ./file.sh && popd.

Ce qui est en fait plus grand et peut échouer si vous avez perdu les autorisations d'accès au répertoire d'origine lorsque vous avez fait le popd.

1
41754