Консоль Linux эквивалентна сценарию графического копирования / вставки файла / каталога - PullRequest
0 голосов
/ 13 февраля 2019

Как просто воссоздать функции копирования / вставки, как в графических средах?

Мой типичный сценарий копирования файла / каталога в консоли Linux:

cp source_path target_path

Иногда пути относительны, иногдаАбсолютно, но я должен предоставить им обоим.Это работает, но есть ситуации, когда я хотел бы воссоздать сценарий из графического интерфейса, который выглядит следующим образом:

1. go to source directory
2. copy file/directory
3. go to target directory
4. paste file/directory

Я представляю что-то вроде

cd source_directory_path
copy_to_stash source_name
cd target_directory_path
paste_from_stash [optional_new_target_name]

Я знаю, что есть приложение xclip,но документация говорит, что она копирует содержимое файла, а не дескриптор файла.Кроме того, я могу использовать переменную $OLDPWD и расширять ее при копировании файла, но это не решение без каких-либо громоздких действий.

Есть ли какая-нибудь простая, общая, только клавиатура, не неудобная для использования эквивалентная?

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

На мой взгляд, ваш единственный вариант - написать скрипт для выполнения всех этих шагов.Вы можете легко реализовать функциональность буфера обмена, скопировав файл в каталог / tmp перед повторным копированием из него.

Это должно работать как задумано.Использование: скрипт [от] [до]

filename=$(basename "$0")
tmpfile=/tmp/$filename.$RANDOM
cd $(dirname "$0")
cp $tmpfile $filename
cd $(dirname "$1")
cp $tmpfile $(basename "$1")
0 голосов
/ 15 февраля 2019

Я также задал тот же вопрос о суперпользователе, и ответ, который я получил, достаточно хорош для меня.

Вкратце: два дополнительных сценария и временная переменная для хранения промежуточного значения.

Ниже приведен код и ссылка на оригинальный ответ.

#!/bin/bash
# source me with one of:
# source [file]
# . [file]

# Initialize
sa_file=

sa(){
# Fuction to save a file in the current PWD
if [[ -e "$PWD/$1" ]]; then
    sa_file=$PWD/$1
    echo "Saved for later: $sa_file"
else
    echo "Error: file $PWD/$1 does not exist"
fi
}


pa(){
# Paste if file exists, to $1 if exists
if [[ -e "$sa_file" ]]; then
    if [[ $1 ]]; then
        cp -v "$sa_file" "$1"
    else
        cp -v "$sa_file" .
    fi
else
    echo "Error: file $sa_file does not exist, could not copy"
fi
}

https://superuser.com/a/1405953/614464

0 голосов
/ 13 февраля 2019

Один вариант: вы можете скопировать и вставить имя файла с помощью мыши, используя функцию копирования-вставки из эмулятора терминала (например, Konsole или GNOME Terminal), но для этого: 1) требуется графический интерфейс, поскольку программное обеспечение эмулятора терминала работает в графическом интерфейсе;2) ну, требуется мышь.

Другой вариант: использовать завершение вкладки оболочки.Вам все еще нужно ввести имя файла, но не все.

Третий вариант, и это ближе к тому, как вы работаете в проводнике файлов GUI: используйте проводник файлов на основе TUI, например, двойную панельстиль Midnight Commander.Вы можете использовать клавиши со стрелками (если вы включили Lynx-подобные настройки движения, что очень рекомендуется), чтобы быстро перемещаться по дереву каталогов.Затем выберите файлы с помощью клавиш Insert, +, - или *, затем скопируйте / переместите файлы с одной панели на другую.Это очень удобноФактически половину времени я провожу в CLI, я провожу в MC.

...