Outra abordagem é criar seu próprio comando dedicado para esse fim. Isso pode ser feito através de uma função que pode se parecer com:
$ function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
Onde: (1) mv-special
é o nome da função; (2) as variáveis $1
e $2
são argumentos na função que serão usados pelos comandos mv
e cd
; (3) $(echo $2-)
adiciona um caractere wildcat ao final da string em var $2
e corrige o comportamento de dirname
se a variável $2
contiver apenas caminho; (4) $(dirname $(echo $2-))
filtrará apenas o caminho de $2
.
De acordo com esta resposta, a função pode se parecer com:
$ function mv-special { mv $1 $2; cd ${2%/*}; }
Onde: ${2%/*}
filtrará apenas o caminho $2
.
Para estar disponível como um comando, esta função deve ser exportada :
$ export -f mv-special
Uso:
$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf
ou:
$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/
Por favor, preste atenção nisso - para ambas as variantes - o segundo argumento ( $2
) deve terminar com o nome do arquivo ou barra ( /
).
Para ser nosso novo comando disponível permanentemente, a definição da função e o comando de exportação devem ser anexados a ~/.bashrc
:
# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
export -f mv-special
ou:
# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd ${2%/*}; }
export -f mv-special
O comando personalizado pode ser feito e por meio de um arquivo de script executável, que é colocado dentro ~/bin
ou dentro de /usr/sbin
: Como criar um comando de terminal personalizado (para executar um script)? Mas, para ser sincero, tive um problema com o comportamento cd
desse cenário.