Parfois, j'ai édité un fichier et je souhaite le déplacer vers un autre dossier. (Généralement: dans un dossier Dropbox, où je ne voulais pas travailler pour éviter de donner aux autres propriétaires du dossier des mises à jour constantes.) Je le fais, par exemple, avec
mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf
Par la suite, je me retrouve souvent à vouloir changer de répertoire vers le répertoire cible de ma précédente opération de déplacement. Je me retrouve à frapper la flèche vers le haut, à supprimer la finale file.pdf
, à tenir à gauche, à la supprimer mv file.pdf
et à la remplacer par cd
.
Existe-t-il un moyen plus rapide et plus intelligent de le faire? Existe-t-il une commande "déplacer le fichier puis changer de répertoire en", ou un raccourci pour le dernier répertoire utilisé, ou quelque chose comme ça?
la source
Réponses:
Si vous utilisez bash, son interaction avec l'historique n'a que le raccourci pour cela. Le mot désignateur du dernier argument de la commande précédente:
Combiné avec un modificateur pour supprimer le dernier composant de chemin:
Après l'indicateur de mot facultatif, vous pouvez ajouter une séquence d'un ou plusieurs des modificateurs valides , chacun précédé d'un «:».
Donc:
Le même raccourci peut également être utilisé avec zsh.
la source
Si vous ne changez pas le nom de fichier, vous pouvez l'omettre et mv l'ajoutera automatiquement; ceci est particulièrement utile lors du déplacement de plusieurs fichiers:
Avec le répertoire comme dernier argument, vous pouvez utiliser
!!:$
ou!$
comme la réponse de muru le décrit.Si vous utilisez bash avec les valeurs par défaut habituelles, vous pouvez utiliser Alt+ à la .place.
(Il s'agit de la
insert-last-argument
commande readline ;bind -p
répertoriera toutes vos liaisons actuelles.)la source
mv
écrase toujours les fichiers de destination en silence, sauf si vous spécifiez les options-i
/--interactive
ou-n
/--no-clobber
. Voilà pourquoi je l'aialias mv='mv -i' cp='cp -i'
dans mon.bashrc
.Une autre approche consiste à créer votre propre commande dédiée à cet effet. Cela peut être fait via une fonction qui pourrait ressembler à ceci :
Où: (1)
mv-special
est le nom de la fonction; (2) les variables$1
et$2
sont des arguments dans la fonction qui seront utilisés par les commandesmv
etcd
; (3)$(echo $2-)
ajoute un caractère générique à la fin de la chaîne dans var$2
et corrige le comportement dedirname
si la variable$2
ne contient que le chemin; (4)$(dirname $(echo $2-))
filtrera uniquement le chemin depuis$2
.Selon cette réponse, la fonction pourrait ressembler à:
Où:
${2%/*}
filtrera uniquement le chemin depuis$2
.Pour être disponible en tant que commande, cette fonction doit être exportée :
Usage:
ou:
Veuillez faire attention à cela - pour les deux variantes - le deuxième argument (
$2
) doit se terminer par filename ou slash (/
).Pour être notre nouvelle commande disponible en permanence, la définition de la fonction et la commande d'exportation doivent être ajoutées à
~/.bashrc
:ou:
Une commande personnalisée peut être effectuée et via un fichier de script exécutable qui est placé dans
~/bin
ou dans/usr/sbin
: Comment puis-je créer une commande de terminal personnalisée (pour exécuter un script)? Mais pour être honnête, j'ai eu un problème avec le comportement decd
dans ce scénario.la source