Скопируйте содержимое файла в буфер обмена, не отображая его содержимое

67

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

Я хочу скопировать их в буфер обмена, чтобы вставить его обратно в блокнот Windows.

Я не могу скопировать файл с этого сервера на другой из-за ограничений доступа.

Веб Нэш
источник
Вы не можете получить доступ к содержимому файла, не открывая его ...
123
Хорошо, если так, есть ли простой способ скопировать очень большой файл. Я получил около 1000 строк.
Веб Нэш
если ваш файл огромен, буфер обмена все равно выйдет из строя. Когда ограничения доступа говорят, что вы не можете прочитать файл, вы потеряны, конечно. Если вы не можете скопировать файл, потому что не можете записать файл, вы должны спросить себя, есть ли другой пункт назначения, в который вы можете написать.
Икраббе
Очень огромный 1000 строк. Выбери один.
123
2
Что такое блокнот для Windows ?
Стефан Шазелас

Ответы:

77

X11

Если вы используете X11 (наиболее распространенный графический интерфейс в традиционных системах на основе Unix или Linux), чтобы скопировать содержимое файла в выбор X11 CLIPBOARD без его отображения , вы можете использовать утилиту xclipили xsel.

xclip -sel c < file

Или же:

xsel -b < file

Для хранения содержимого в fileкачестве выбора CLIPBOARD X11.

Обратите внимание, что он должен храниться с использованием кодировки UTF-8, иначе вставка не будет работать должным образом. Если fileкодируется с использованием другого набора символов, вы должны сначала преобразовать в UTF-8, например:

iconv -f latin1 -t utf8 | xclip -sel c

Для файла , закодированного в latin1 / iso8859-1 .

Чтобы сохранить его как CUT_BUFFER (они все еще запрашиваются некоторыми приложениями, например, xtermкогда ничто не запрашивает выборки CLIPBOARD или PRIMARY X и не требуется запуск процесса, который бы обслуживал его как выборки), хотя вы, вероятно, не захотите или нужно использовать это в настоящее время:

xprop -root -format CUT_BUFFER0 8s -set CUT_BUFFER0 "$(cat file)"

(удаляет завершающие символы новой строки из file).

Экран GNU

У GNU screenесть readbufкоманда, чтобы вылить содержимое файла в свой собственный буфер копирования-вставки (который вы вставляете ^A]). Так:

screen -X readbuf file

Apple OS / X

Хотя Apple OS / X может использовать X11. Это не по умолчанию, если вы не запустите приложение X11. Вы можете использовать его там xclipили xselтам, так как OS / X должен синхронизировать выбор X11 CLIPBOARD с буферами OS / X, но это будет пустой тратой на запуск сервера X11 только для этого.

В OS / X вы можете использовать pbcopyкоманду для хранения произвольного содержимого в буферах монтажа :

pbcopy < file

(ожидается, что кодировка символа файла будет языковой кодировкой).

ракушки

Большинство оболочек имеют свои собственные буферы копирования-вставки. В режиме emacs операции вырезания и копирования сохраняют скопированный / вырезанный текст в стек, который вы нажимаете / вставляете Ctrl-Y, и циклически перебираете с помощьюAlt+Y

Zsh CUTBUFFER / killring

В zshэтом случае стек хранится в $killringмассиве, а верхняя часть стека - в $CUTBUFFERпеременной, хотя эти переменные доступны только из виджетов Zsh Line Editor (zle), и несколько специализированных виджетов являются предпочтительным способом управления ими.

Поскольку они доступны только через ZLE, делать это с помощью команд немного запутанно:

zmodload zsh/mapfile
zle-line-init() {
  if [ -n "$FILE_TO_COPY" ]; then
    zle copy-region-as-kill $mapfile[$FILE_TO_COPY]
    unset FILE_TO_COPY
  fi
}
zle -N zle-line-init
file-copy() FILE_TO_COPY=$1:A       

zle-line-initСпециальный виджет выполняется один раз в начале каждой новой командной строки. Это означает, что файл будет скопирован только при следующем запросе. Например, если вы делаете:

file-copy file; sleep 2

Файл будет скопирован только после этих 2 секунд.

Стефан Шазелас
источник
3
Я сталкиваюсь с этой ошибкой:Error: Can't open display: (null)
Marcelo Filho
Та же проблема здесь, в Fedora 7
Майкл Пачеко
@MarceloFilho, xclipи xselявляются утилитами X11, они манипулируют выборами X11, поэтому могут использоваться только в среде X11, где $DISPLAYустановлено.
Стефан Шазелас
2

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

ikrabbe
источник
Так в чем твоя настоящая проблема? Если вы можете читать, но не можете копировать, вы не сможете писать. Но когда вы хотите скопировать, вам нужно записать данные куда-нибудь.
Икраббе
благодарю вас!!! ты спас мне жизнь)
Алена Костюкавец
0

Используя X11:

xclip -o > file

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

tjombka
источник