Ocasionalmente, editei algum arquivo e quero movê-lo para uma pasta diferente. (Normalmente: em uma pasta do Dropbox, onde eu não queria trabalhar para evitar atualizações constantes aos outros proprietários da pasta.) Faço isso, por exemplo, com
mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf
Posteriormente, muitas vezes me vejo desejando alterar o diretório para o diretório de destino da minha operação de movimentação anterior. Encontro-me pressionando a seta para cima, excluindo a final file.pdf
, mantendo a esquerda, excluindo mv file.pdf
e substituindo-a por cd
.
Existe uma maneira mais rápida e inteligente de fazer isso? Existe um comando "mover arquivo e depois alterar o diretório para" ou um atalho para o último diretório usado ou algo assim?
command-line
mv
Mees de Vries
fonte
fonte
Respostas:
Se você estiver usando o bash, a interação do histórico terá apenas o atalho para isso. A designação de palavra para o último argumento do comando anterior:
Combinado com um modificador para remover o último componente do nome do caminho:
Após o designador opcional de palavras, você pode adicionar uma sequência de um ou mais modificadores válidos , cada um precedido por um ':'.
Então:
O mesmo atalho também pode ser usado com o zsh.
fonte
Se você não está alterando o nome do arquivo, você pode omiti-lo e o mv o adicionará automaticamente; isso é especialmente útil ao mover vários arquivos:
Com o diretório como último argumento, você pode usar
!!:$
ou!$
como a resposta de muru descreve.Se você estiver usando o bash com os padrões usuais, poderá usar Alt+ ..
(Este é o
insert-last-argument
comando readline ;bind -p
listará todas as suas ligações atuais.)fonte
mv
sempre substitui os arquivos de destino silenciosamente, a menos que você especifique as opções-i
/--interactive
ou-n
/--no-clobber
. É por isso que tenhoalias mv='mv -i' cp='cp -i'
no meu.bashrc
.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:
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 comandosmv
ecd
; (3)$(echo $2-)
adiciona um caractere wildcat ao final da string em var$2
e corrige o comportamento dedirname
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:
Onde:
${2%/*}
filtrará apenas o caminho$2
.Para estar disponível como um comando, esta função deve ser exportada :
Uso:
ou:
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
:ou:
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 comportamentocd
desse cenário.fonte