Existe-t-il un moyen d'exécuter une mvcommande 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
Existe-t-il un moyen d'exécuter une mvcommande 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
Réponses:
Vous pouvez utiliser l'extension d'accolade de bash. Cette:
mv my/file/that/has/a/really/long/path/foo.{bar,baz}
s'étendra à:
mv my/file/that/has/a/really/long/path/foo.bar my/file/that/has/a/really/long/path/foo.baz
puis mvest exécuté avec ces deux arguments. Voir http://wiki.bash-hackers.org/syntax/expansion/brace pour plus d'informations sur l'expansion des accolades.
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 argument Vous pouvez effectuer des substitutions sur l'expansion en utilisant une s/pattern/replacementsyntaxe de type sed, par exemple
somecommand path/to/foo.bar !#$:s/.bar/.baz
Ex.
$ mv -v somepath/Original/Dir3/SubDir1/foo.bar !#$:s/.bar/.baz
mv -v somepath/Original/Dir3/SubDir1/foo.bar somepath/Original/Dir3/SubDir1/foo.baz
'somepath/Original/Dir3/SubDir1/foo.bar' -> 'somepath/Original/Dir3/SubDir1/foo.baz'
Si vous voulez spécifiquement le chemin (par exemple, vers mvun fichier avec un nom complètement différent qui n'est pas facilement obtenu par substitution), vous pouvez utiliser le hmodificateur:
$ mv -v somepath/Original/Dir3/SubDir1/foo.baz !#$:h/baz.foo
mv -v somepath/Original/Dir3/SubDir1/foo.baz somepath/Original/Dir3/SubDir1/baz.foo
'somepath/Original/Dir3/SubDir1/foo.baz' -> 'somepath/Original/Dir3/SubDir1/baz.foo'
Pour d'autres options, y compris readlinedes combinaisons de touches pour extraire le dernier argument, voir Comment répéter le paramètre actuellement tapé sur la console bash?
`DIR=./really/long/path/mv "$DIR"foo.bar "$DIR"foo.bzEn une seule ligne: DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
cdaccéder au répertoire dans lequel vous souhaitez travailler:cd ./really/long/pathmv foo.bar foo.bzEn une seule ligne: cd ./really/long/path && mv foo.bar foo.bz
&&dans cette dernière doublure. Sinon, en cas d' cdéchec, le mvsera exécuté dans le mauvais répertoire, écrasant potentiellement un fichier. Avec cd ./really/long/path && mv foo.bar foo.baz, mvne sera exécuté que s'il cdréussit à changer de répertoire.
cdau répertoire et àmvpartir de là?