2

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

Мой типичный сценарий копирования файла / каталога в консоли 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 и расширять ее, когда копирую файл, но это не решение без некоторого громоздкого.

Есть ли какая-нибудь простая, общая, только клавиатура, не неудобно ли использовать эквивалент? Я не хочу использовать дополнительных менеджеров, таких как рейнджер, полуночный командир, только кли.

2 ответа2

2

Вы должны быть в состоянии сделать это с помощью некоторых основных функций и переменной оболочки $ PWD, чтобы получить абсолютный путь, сохранить указанное вами имя и затем скопировать его, где бы вы ни находились. Вот два для bash (dash/sh может просто потребовать использовать test или [ вместо [[)):

#!/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
}

Я использовал имена sa для сохранения и pa для вставки [ так как меньше печатать = лучше, верно? ] но с присвоением им имени все будет работать, например, copy_to_stash.

0

Вы можете использовать xclip для копирования и вставки путей к файлам.

cd source_directory_path
realpath some_file | xclip  # Copy the path to a file
cd target_directory_path
cp "$(xclip -o)" .          # Copy ("paste") the file to the current directory

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .