Как cp в два этапа

Время от времени я нахожу необходимость:

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

Поскольку я использую autojump , autojump к каталогам очень быстрый и легкий. Однако я затрудняюсь при копировании из одного каталога в другой, не вводя хотя бы один из полных путей.

В навигаторе файловой системы GUI это легко: перейдите к первому каталогу; Скопируйте исходный файл; перейдите во второй каталог; и Вставить . Но с помощью cp кажется, что я не могу сделать копию в два этапа.

Я хочу сделать что-то вроде следующего:

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

Вместо более длительного типа:

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

Есть ли инструмент, который обеспечивает функциональность, которую я ищу? Я использую Zsh на OS X El Capitan.

    Нижеследующее работает в bash . Я не пробовал это в zsh .

    Пытаться:

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

    Затем:

     cp file.txt ~-/copy.txt 

    Также см:

    • Дополнительные примеры использования ~- (и его взаимодействия с pushd и popd )
    • Можно ли назвать часть команды для повторного использования ее в той же самой команде позже?

    Вот альтернативное решение, вдохновленное комментарием @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:-.} } 

    Пример использования:

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

    Как вы можете видеть, эти псевдонимы очень тонкие обертки вокруг команд cp , mv и ln -s , поэтому вы также можете передать каталог в качестве второго аргумента или copy несколько файлов или каталогов или опустить второй аргумент действовать в текущем каталоге.