Скопіюйте вміст файлу в буфер обміну, не показуючи його вміст


66

Як скопіювати вміст файлу в UNIX без відображення вмісту файлу. Я не хочу котів чи vi, щоб бачити вміст.

Я хочу скопіювати їх у буфер обміну, щоб я міг вставити його назад на свій блокнот Windows.

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


Ви не можете отримати доступ до вмісту файлу, не відкривши його ...
123

Гаразд, якщо так, то існує простий спосіб скопіювати дуже величезний файл. У мене вийшло 1000 рядків.
Web Nash

якщо ваш файл величезний, буфер обміну все одно вийде з ладу. Коли обмеження доступу кажуть, що ви не можете прочитати файл, ви, звичайно, втрачаєте. Якщо ви не можете скопіювати файл, оскільки ви не можете записати файл, потрібно запитати себе, чи є інше призначення, на яке ви можете написати.
ikrabbe

Дуже величезна. 1000 рядків. Вибрати один.
123

2
Що таке вікно блокнота BTW?
Стефан Шазелас

Відповіді:


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 / вбивство

В 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

Якщо ви можете прочитати файл, проблема доступу стосується сервера призначення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.