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?
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}
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.
Tout ce qui précède est bon. Cela fonctionnerait également:
( cd ~/folder/subfolder && mv file.txt file.sh )
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
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"
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
.