Copier le contenu d'un fichier dans le presse-papier sans afficher son contenu

67

Comment copier le contenu d'un fichier sous UNIX sans afficher le contenu du fichier. Je ne veux pas chat ou vi pour voir le contenu.

Je veux les copier dans le presse-papiers pour pouvoir les coller à nouveau dans le bloc-notes Windows.

Je ne peux pas copier le fichier de ce serveur sur un autre en raison de restrictions d'accès.

Web Nash
la source
Vous ne pouvez pas accéder au contenu d'un fichier sans l'avoir ouvert ...
123 au
OK, dans ce cas, existe-t-il un moyen simple de copier un fichier très volumineux? J'ai comme 1000 lignes.
Web Nash
Si votre fichier est énorme, le presse-papiers échouera de toute façon. Lorsque les restrictions d'accès indiquent que vous ne pouvez pas lire le fichier, vous êtes perdu, bien sûr. Si vous ne pouvez pas copier le fichier parce que vous ne pouvez pas l'écrire, vous devez vous demander s'il existe une autre destination pour laquelle vous pouvez écrire.
ikrabbe
Énorme. 1000 lignes. Choisissez-en un.
123
2
Qu'est-ce qu'un bloc-notes Windows BTW?
Stéphane Chazelas

Réponses:

77

X11

Si vous utilisez X11 (l'interface graphique la plus courante sur les systèmes Unix ou Linux traditionnels), pour copier le contenu d'un fichier dans la sélection CLIPBOARD X11 sans l' afficher , vous pouvez utiliser l' utilitaire xclipou xsel.

xclip -sel c < file

Ou:

xsel -b < file

Pour stocker le contenu de filesous la sélection CLIPBOARD X11.

Notez qu'il doit être stocké en utilisant un codage UTF-8 ou le collage ne fonctionnera pas correctement. Si le fileest encodé en utilisant un autre jeu de caractères, vous devez d'abord convertir en UTF-8, comme ceci:

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

Pour un fichier encodé en latin1 / iso8859-1 .

Pour le stocker en tant que CUT_BUFFER (celles-ci sont toujours interrogées par certaines applications, comme par exemple xtermlorsque rien ne revendique les sélections CLIPBOARD ou PRIMARY X et qu'il n'est pas nécessaire qu'un processus soit exécuté pour le servir), bien que vous ne souhaitiez probablement pas ou besoin d'utiliser que de nos jours:

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

(supprime les caractères de fin de ligne de fin file).

Écran GNU

GNU screena la readbufcommande d'insuffler le contenu d'un fichier dans son propre tampon de copier-coller (avec lequel vous collez ^A]). Alors:

screen -X readbuf file

Apple OS / X

Bien que Apple OS / X puisse utiliser X11. Ce n'est pas le cas par défaut, sauf si vous exécutez une application X11. Vous pourriez utiliser xclipou xsellà - bas, car OS / X devrait synchroniser la sélection X11 CLIPBOARD avec les tampons de la carte de montage pour OS / X, mais ce serait un gaspillage de démarrer le serveur X11 rien que pour cela.

Sous OS / X, vous pouvez utiliser la pbcopycommande pour stocker le contenu arbitraire dans cartonnés tampons:

pbcopy < file

(le codage de caractères du fichier est censé être celui de la locale).

Coquilles

La plupart des shells ont leurs propres tampons copier-coller. En mode emacs, les opérations de couper et copier stockent le texte copié / coupé sur une pile avec laquelle vous collez et collez Ctrl-Y, puis parcourez-le avecAlt+Y

zsh CUTBUFFER / killring

Dans zsh, la pile est stockée dans le $killringtableau et le haut de la pile dans la $CUTBUFFERvariable bien que ces variables ne soient disponibles que depuis les widgets Zsh Line Editor (zle) et que quelques widgets spécialisés constituent le moyen préféré pour les manipuler.

Comme ceux-ci ne sont disponibles que via le ZLE, le faire avec des commandes est un peu compliqué:

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       

Le zle-line-initwidget spécial est exécuté une fois au début de chaque nouvelle invite de commande. Cela signifie que le fichier ne sera copié qu'à la prochaine invite. Par exemple, si vous le faites:

file-copy file; sleep 2

Le fichier ne sera copié qu’après ces 2 secondes.

Stéphane Chazelas
la source
3
Je suis confronté à cette erreur:Error: Can't open display: (null)
Marcelo Filho
Même problème ici dans fedora 7
Michael Pacheco Le
@MarceloFilho, xclipet xselsont des utilitaires X11, ils manipulent les sélections X11, ils ne peuvent donc être utilisés que dans un environnement X11 où $DISPLAYest défini.
Stéphane Chazelas
2

Peut-être que vous vouliez demander ceci . Mais tout fichier que vous souhaitez lire doit être ouvert par un appel système. Si vous n'avez pas accès à un fichier, vous ne pouvez pas le lire. C'est l'idée d'un accès restreint.

Ikrabbe
la source
Alors, quel est votre problème actuel? Si vous savez lire mais que vous ne pouvez pas copier, vous ne pourrez peut-être pas écrire. Mais lorsque vous voulez copier, vous devez écrire les données quelque part.
ikrabbe
Merci!!! tu as sauvé ma vie)
Alena Kastsiukavets
0

Utiliser X11:

xclip -o > file

Si vous pouvez lire le fichier, le problème d'accès concerne le serveur de destination.

tjombka
la source