Linux – скопировать/вырезать файл в буфер обмена

Вопрос или проблема

Мне было интересно, возможно ли скопировать или вырезать файл в буфер обмена, а затем вставить его в другую директорию позже. Я быстро поискала и нашла только информацию о том, как скопировать содержимое файла в буфер обмена, но не сам файл.

Когда вы нажимаете Ctrl-C на файле в файловом менеджере, содержимое файла НЕ копируется в буфер обмена. Простой тест: выберите файл в файловом менеджере, нажмите Ctrl-C, откройте текстовый редактор, нажмите Ctrl-V. Результат будет не содержимым файла, а его полным путем.

На самом деле ситуация немного сложнее, потому что вы не можете сделать обратное — скопировать список имен файлов из текстового редактора и вставить их в файловый менеджер.

Чтобы скопировать некоторые данные из командной строки в буфер обмена X11, вы можете использовать команду xclip, которая может быть установлена с помощью

sudo apt-get install xclip

чтобы скопировать содержимое файла или вывод какой-то команды в буфер обмена, используйте

cat ./myfile.txt|xclip -i

текст затем можно вставить куда-либо с помощью средней кнопки мыши (это называется “буфером первичного выбора”).

Если вы хотите скопировать данные в выбор “clipboard”, чтобы можно было вставить их в приложение с помощью Ctrl-V, вы можете сделать

cat ./myfile.txt|xclip -i -selection clipboard

Чтобы иметь возможность копировать файлы из командной строки и вставлять их в файловый менеджер, вам нужно указать правильный “целевой атом”, чтобы файловый менеджер распознал данные в буфере обмена, и также предоставить данные в правильном формате — к счастью, в случае копирования файлов в файловом менеджере это просто список абсолютных имен файлов, каждое на новой строке, что легко сгенерировать с помощью команды find:

find ${PWD} -name "*.pdf"| xclip -i -selection clipboard -t text/uri-list

(по крайней мере, это работает у меня в KDE). Теперь вы можете завернуть это в небольшой скрипт, который можно назвать, скажем, cb:

#!/bin/sh
xclip -i -selection clipboard -t text/uri-list

затем поместите его в ~/bin, установите на него бит выполнения и используйте так:

find ${PWD} -name "*.txt"| cb

Неплохо, правда?

Источник на askubuntu

Это работает в терминале mac и в linux на Digital Ocean.

pbcopy < ~/.ssh/id_rsa.pub

Если вы решите поместить путь к файлу в системный буфер обмена, вы можете использовать это в вашем ~/.bashrc:

yankpath() {
  filepath=$(realpath "$1")
  # Мы используем pipe, чтобы поместить имя файла в буфер обмена.
  # Если бы мы сделали "xclip -selection clipboard $filepath", содержимое файла оказалось бы в буфере обмена.
  # -rmlastnl удаляет окончательный перевод строки из пути к файлу.
  echo $filepath | xclip -rmlastnl -selection clipboard
}

Затем вы можете yankpath ./a_file и весь путь к файлу a_file будет в буфере обмена системы X.

Если вы хотите копировать файлы в терминале, а затем уметь вставлять их в файловый менеджер:
Сохраните это как скрипт cpfiles

#!/bin/bash
{
    for i in "$@"; do
        echo -en "file://""$(realpath "${i}")""\n"
    done
} | xclip -i -sel c -rmlastnl -t text/uri-list

Используйте это

cpfiles '/path/to/file1/' 'path/to/file2'

Затем вставьте с помощью Ctrl+v в файловом менеджере

.

Ответ или решение

Для многих пользователей Linux задача копирования или перемещения файлов через буфер обмена может показаться сложной из-за особенностей работы с командной строкой и различий в поведении графических интерфейсов. Однако в этой статье мы рассмотрим, как можно эффективно управлять файлами с помощью буфера обмена, и какие инструменты для этого потребуются.

Теория

В операционных системах, которые поддерживают графический пользовательский интерфейс, как правило, предусмотрены механизмы копирования и вставки файлов через буфер обмена. В Linux, при работе через менеджеры файлов, вроде Nautilus или Dolphin, операция копирования файла обычно означает копирование пути файла, а не его содержимого. Это значит, что если вы выделите файл и нажмете Ctrl+C, а затем Ctrl+V в текстовом редакторе, то вместо содержимого вы увидите полный путь к файлу. Это поведение обусловлено тем, что менеджеры файлов используют текстовые представления файловых объектов для облегчения процессов копирования и перемещения.

Чтобы обеспечить копирование файлов через командную строку в контексте X11 (системы окон), вы можете воспользоваться утилитой xclip — мощным инструментом для взаимодействия с буфером обмена.

Пример

  1. Установка xclip: Для начала вам потребуется установить xclip, если это еще не сделано. Используйте следующую команду:

    sudo apt-get install xclip
  2. Копирование содержимого файла в буфер обмена: Чтобы скопировать содержимое файла в буфер обмена, используйте команду:

    cat ./myfile.txt | xclip -i -selection clipboard

    Эта команда скопирует содержимое файла в "клипборд" — выборку, которая позволяет вставлять данные в приложениях при помощи Ctrl+V.

  3. Копирование пути файла: Чтобы скопировать только путь файла в буфер обмена, используйте функцию в вашем ~/.bashrc:

    yankpath() {
      filepath=$(realpath "$1")
      echo $filepath | xclip -rmlastnl -selection clipboard
    }

    Теперь вы можете вызвать функцию yankpath ./a_file, чтобы положить на буфер обмена полный путь к файлу.

  4. Копирование файлов через командную строку для вставки в менеджере файлов: Вы можете использовать специальный скрипт для генерации списка файлов и их копирования в буфер обмена таким образом, чтобы эти файлы можно было вставить в графический файловый менеджер:

    Сохраните следующий код в файл cpfiles и добавьте разрешение на исполнение:

    #!/bin/bash
    {
        for i in "$@"; do
            echo -en "file://""$(realpath "${i}")""\n"
        done
    } | xclip -i -sel c -rmlastnl -t text/uri-list

    Используйте его следующим образом:

    cpfiles '/path/to/file1/' 'path/to/file2'

    Теперь вы можете воспользоваться комбинацией клавиш Ctrl+V в файловом менеджере, чтобы вставить файлы.

Применение

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

Кроме того, это решение может быть интегрировано в процессы DevOps, автоматизации рабочих процессов, создания резервных копий и развертывания приложений, где требуются регулярные операции по копированию и перемещению файлов. Зная, как работает копирование файлов в контексте буфера обмена и имея под рукой такой инструмент, как xclip, пользователи могут значительно увеличить свою продуктивность и гибкость при управлении файлами в системах на базе Linux и других Unix-подобных системах.

Таким образом, освоив эти инструменты, вы получите возможность легко и эффективно взаимодействовать с файловой системой через командную строку, используя возможности современного графического интерфейса Linux.

Оцените материал
Добавить комментарий

Капча загружается...