Como cp em duas etapas

2

De vez em quando, acho necessário:

cp /really/long/path/to/file.txt /totally/different/long/path/to/copy.txt

Como eu uso autojump , chegando aos diretórios é muito rápido e fácil. No entanto, estou perdido quando se trata de copiar de um diretório para outro sem ter que digitar pelo menos um dos caminhos completos.

Em um navegador do sistema de arquivos GUI, isso é fácil: navegue até o primeiro diretório; Copie o arquivo original; navegue até o segundo diretório; e Colar . Mas com cp , parece que não posso fazer a cópia em duas etapas.

Estou procurando fazer algo como o seguinte:

(use autojump to navigate to the first directory)
$ copy file.txt
(use autojump to navigate to the second directory)
$ paste copy.txt

Em vez do mais para digitar:

(use autojump to navigate to the first directory)
$ cp file.txt /totally/different/long/path/to/copy.txt

Existe uma ferramenta que fornece a funcionalidade que estou procurando? Estou usando o Zsh no OS X El Capitan.

    
por Radon Rosborough 06.08.2016 / 00:51

2 respostas

3

O abaixo funciona em bash . Eu não tentei em zsh .

Tente:

echo ~-   # Just to make sure you know what the "last directory" is

Então:

cp file.txt ~-/copy.txt

Veja também:

por 06.08.2016 / 00:57
1

Aqui está uma solução alternativa, inspirada no comentário de @Stephen Harris:

# You can "copy" any number of files, then "paste", "move" or
# "pasteln" them to pass them as arguments to cp, mv, or ln
# respectively. Just like a graphical filesystem manager. Each of the
# latter three functions defaults to the current directory as the
# destination.
function copy() {
    emulate -LR zsh
    radian_clipboard=()
    for target; do
        radian_clipboard+=(${target:a})
    done
}
function paste() {
    emulate -LR zsh
    cp -R $radian_clipboard ${1:-.}
}
function move() {
    emulate -LR zsh
    mv $radian_clipboard ${1:-.}
}
function pasteln() {
    emulate -LR zsh
    ln -s $radian_clipboard ${1:-.}
}

Exemplo de uso:

(autojump to first directory)
$ copy file.txt
(autojump to second directory)
$ paste copy.txt

Como você pode ver, esses aliases são muito finos em torno dos comandos cp , mv e ln -s , então você também pode passar um diretório como segundo argumento ou copy de vários arquivos ou diretórios de uma vez, ou omitir o segundo argumento para atuar no diretório atual.

    
por 06.08.2016 / 01:13