Cómo copiar el contenido de un archivo en UNIX sin mostrar el contenido del archivo. No quiero que cat o vi vean el contenido.
Quiero copiarlos en el portapapeles para poder volver a pegarlos en mi bloc de notas de Windows.
No puedo copiar el archivo de ese servidor a otro debido a restricciones de acceso.
Respuesta aceptada:
X11
Si usa X11 (la GUI más común en los sistemas tradicionales basados en Unix o Linux), para copiar el contenido de un archivo a la selección del PORTAPAPELES X11 sin mostrar puede usar el xclip
o xsel
utilidad.
xclip -sel c < file
O:
xsel -b < file
para almacenar el contenido del file
como la selección de CLIPBOARD X11.
Para almacenar la salida de un comando:
mycommand | xclip -sel c
mycommand | xsel -b
Tenga en cuenta que debe almacenarse utilizando una codificación UTF-8 o, de lo contrario, el pegado no funcionará correctamente. Si el file
está codificado con otro conjunto de caracteres, primero debe convertir a UTF-8, como:
<file iconv -f latin1 -t utf8 | xclip -sel c
para un archivo codificado en latin1 /iso8859-1 .
xsel
no funciona con datos binarios (no acepta bytes nulos), pero xclip
lo hace.
Para almacenarlo como CUT_BUFFER (aún son consultados por algunas aplicaciones como xterm
cuando nada reclama las selecciones CLIPBOARD o PRIMARY X y no necesita tener un proceso ejecutándose para servirlo como para las selecciones), aunque probablemente no quiera o necesite usar eso hoy en día:
xprop -root -format CUT_BUFFER0 8s -set CUT_BUFFER0 "$(cat file)"
(elimina los caracteres finales de nueva línea de file
).
Pantalla GNU
GNU screen
tiene el readbuf
comando para absorber el contenido de un archivo en su propio búfer de copiar y pegar (que se pega con ^A]
). Entonces:
screen -X readbuf file
Apple OS/X
Aunque Apple OS/X puede utiliza X11. No lo hace de forma predeterminada a menos que ejecute una aplicación X11. Podrías usar xclip
o xsel
allí, como OS/X, debería sincronizar la selección de X11 CLIPBOARD con los búferes de la mesa de trabajo de OS/X, pero sería un desperdicio iniciar el servidor X11 solo para eso.
En OS/X, puede usar pbcopy
comando para almacenar contenido arbitrario en pasteboard tampones:
pbcopy < file
(Se espera que la codificación de caracteres del archivo sea la de la configuración regional). Para almacenar la salida de un comando:
mycommand | pbcopy
Conchas
La mayoría de los shells tienen sus propios búferes de copiar y pegar. En el modo emacs, las operaciones de cortar y copiar almacenan el texto copiado/cortado en una pila que se tira/pega con Ctrl-Y y recorrer con Alt+Y
Relacionado:¿Tomar la primera columna de 2 archivos y escribirla en un tercer archivo?zsh BUFFER DE CORTE/anillo de muerte
En zsh
, la pila se almacena en el $killring
matriz y la parte superior de la pila en el $CUTBUFFER
aunque esas variables solo están disponibles desde los widgets de Zsh Line Editor (zle) y algunos widgets especializados son la forma preferida de manipularlos.
Debido a que solo están disponibles a través de ZLE, hacerlo con comandos es un poco complicado:
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
El zle-line-init
El widget especial se ejecuta una vez al comienzo de cada nuevo símbolo del sistema. Lo que eso significa es que el archivo solo se copiará en el siguiente mensaje. Por ejemplo, si lo hace:
file-copy file; sleep 2
El archivo solo se copiará después de esos 2 segundos.