Jak zkopírovat obsah souboru v UNIXu bez zobrazení obsahu souboru. Nechci kočku nebo vi vidět obsah.
Chci je zkopírovat do schránky, abych je mohl vložit zpět do poznámkového bloku Windows.
Nemohu zkopírovat soubor z tohoto serveru na jiný kvůli omezení přístupu.
Přijatá odpověď:
X11
Pokud používáte X11 (nejběžnější GUI na tradičních Unixových nebo Linuxových systémech), ke zkopírování obsahu souboru do výběru X11 CLIPBOARD bez zobrazení můžete použít xclip
nebo xsel
utility.
xclip -sel c < file
Nebo:
xsel -b < file
k uložení obsahu file
jako výběr CLIPBOARD X11.
Chcete-li uložit výstup příkazu:
mycommand | xclip -sel c
mycommand | xsel -b
Pamatujte, že by mělo být uloženo pomocí kódování UTF-8, jinak nebude vkládání fungovat správně. Pokud file
je kódován pomocí jiné znakové sady, měli byste nejprve převést na UTF-8, například:
<file iconv -f latin1 -t utf8 | xclip -sel c
pro soubor zakódovaný v latin1 /iso8859-1 .
xsel
nefunguje s binárními daty (neakceptuje prázdné bajty), ale xclip
ano.
Chcete-li jej uložit jako CUT_BUFFER (které jsou stále dotazovány některými aplikacemi, jako je xterm
když si nic nenárokuje výběry SCHRÁNKA nebo PRIMARY X a nepotřebujete mít spuštěný proces, který by to obsluhoval jako pro výběry), i když to dnes pravděpodobně nebudete chtít nebo nebudete muset používat:
xprop -root -format CUT_BUFFER0 8s -set CUT_BUFFER0 "$(cat file)"
(odstraní koncové znaky nového řádku ze file
).
Obrazovka GNU
screen
GNU má readbuf
příkaz k uschování obsahu souboru do jeho vlastní vyrovnávací paměti pro kopírování a vkládání (kterou vložíte pomocí ^A]
). Takže:
screen -X readbuf file
Apple OS/X
Ačkoli Apple OS/X může použijte X11. Ve výchozím nastavení ne, pokud nespustíte aplikaci X11. Budete moci použít xclip
nebo xsel
tam by OS/X měl synchronizovat výběr X11 SCHRÁNKY s vyrovnávacími pamětmi pracovní desky OS/X, ale spouštět server X11 jen kvůli tomu by byla trochu škoda.
V OS/X můžete použít pbcopy
příkaz k uložení libovolného obsahu do kartonu buffery:
pbcopy < file
(očekává se, že kódování znaků souboru bude odpovídat místnímu nastavení). Chcete-li uložit výstup příkazu:
mycommand | pbcopy
Skořápky
Většina shellů má své vlastní vyrovnávací paměti pro kopírování a vkládání. V režimu emacs operace vyjmutí a kopírování ukládají zkopírovaný/vyjmutý text do zásobníku, který vytáhnete/vložíte pomocí Ctrl-Y a procházejte pomocí Alt+Y
Související:Vzít první sloupec ze 2 souborů a zapsat ho do 3. souboru?zsh CUTBUFFER/killring
V zsh
, zásobník je uložen v $killring
pole a horní část zásobníku v $CUTBUFFER
proměnná, ačkoli tyto proměnné jsou dostupné pouze z widgetů Zsh Line Editor (zle) a několik specializovaných widgetů je preferovaným způsobem, jak s nimi manipulovat.
Protože ty jsou dostupné pouze přes ZLE, je to s příkazy trochu spletité:
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
}
mycommand | pbcopy
mycommand | pbcopy
zle -N zle-line-init
file-copy() FILE_TO_COPY=$1:A
zle-line-init
speciální widget se spustí jednou na začátku každého nového příkazového řádku. To znamená, že soubor bude zkopírován až na další výzvu. Pokud například:
file-copy file; sleep 2
Soubor bude zkopírován až po těchto 2 sekundách.