Existe-t-il un moyen d'exécuter une mv
commande sans taper le chemin complet dans le deuxième argument?
Exemple:
mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz
command-line
Finbarr
la source
la source
cd
au répertoire et àmv
partir de là?Réponses:
Vous pouvez utiliser l'extension d'accolade de bash. Cette:
s'étendra à:
puis
mv
est exécuté avec ces deux arguments. Voir http://wiki.bash-hackers.org/syntax/expansion/brace pour plus d'informations sur l'expansion des accolades.la source
Comme alternative à l'expansion d'accolade, vous pouvez utiliser les fonctionnalités d' expansion de l'historique du shell bash :
!
introduit une extension de l'histoire#
désignateur d'événement désignant la commande en cours$
désignateur de mot faisant référence au dernier argumentVous pouvez effectuer des substitutions sur l'expansion en utilisant une
s/pattern/replacement
syntaxe de type sed, par exempleEx.
Si vous voulez spécifiquement le chemin (par exemple, vers
mv
un fichier avec un nom complètement différent qui n'est pas facilement obtenu par substitution), vous pouvez utiliser leh
modificateur:Pour d'autres options, y compris
readline
des combinaisons de touches pour extraire le dernier argument, voir Comment répéter le paramètre actuellement tapé sur la console bash?la source
Vous pourriez essayer:
la source
Avec une variable
`DIR=./really/long/path/
mv "$DIR"foo.bar "$DIR"foo.bz
En une seule ligne:
DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
Changer de répertoire
cd
accéder au répertoire dans lequel vous souhaitez travailler:cd ./really/long/path
mv foo.bar foo.bz
En une seule ligne:
cd ./really/long/path && mv foo.bar foo.bz
la source
&&
dans cette dernière doublure. Sinon, en cas d'cd
échec, lemv
sera exécuté dans le mauvais répertoire, écrasant potentiellement un fichier. Aveccd ./really/long/path && mv foo.bar foo.baz
,mv
ne sera exécuté que s'ilcd
réussit à changer de répertoire.Vous pouvez vous alias commande pour abréger le nom du répertoire:
la source
alias test='/var/log' ; cd test
donne-bash: cd: test: No such file or directory
.