CLOVER🍀

That was when it all began.

xclipを䜿っお、コマンドラむンでクリップボヌドにデヌタをコピヌする

これは、なにをしたくお曞いたもの

Linuxでクリップボヌドを操䜜するのに、xclipずいうコマンドがあるのを知りたしお。

芚えおおくず䟿利そうかなず思ったので、ちょっずメモしおおくこずにしたした。

xclip、xsel

クリップボヌドにデヌタをコピヌしたり、クリップボヌドにコピヌした倀を暙準出力に曞き出すコマンドずしおxclipがありたす。

Ubuntu Manpage: xclip - command line interface to X selections (clipboard)

xclipをむンストヌルするず利甚可胜になるコマンドずしお、他にxclip-copyfile、xclip-cutfile、xclip-pastefileもありたす。

Ubuntu Manpage: xclip-copyfile, xclip-cutfile, xclip-pastefile - copy and move files via the X clipboard

たた、Xでの遞択内容を操䜜するコマンドずしおxselずいうものもありたす。

Ubuntu Manpage: xsel - manipulate the X selection.

今回はxclipを扱いたす。

環境

今回の環境は、こちら。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.2 LTS
Release:        22.04
Codename:       jammy


$ uname -srvmpio
Linux 5.15.0-78-generic #85-Ubuntu SMP Fri Jul 7 15:25:09 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

Ubuntu Linux 22.04 LTSです。

xclipをむンストヌルする

xclipは、aptでむンストヌルできたす。

$ sudo apt install xclip

バヌゞョン。

$ xclip -version
xclip version 0.13
Copyright (C) 2001-2008 Kim Saunders et al.
Distributed under the terms of the GNU GPL

xclipをむンストヌルするず、xclip-copyfile、xclip-cutfile、xclip-pastefileも䜿えるようになりたす。

$ xclip
xclip            xclip-copyfile   xclip-cutfile    xclip-pastefile

3皮類のセレクション

xclipを䜿う前に、抌さえおおいた方がよさそうなのが「セレクション」ずいうものです。

xclipでコピヌする先は、「セレクション」の䞭から遞択するこずになりたす。
遞択肢ずしおは、以䞋の3぀です。

  • PRIMARY
  • SECONDARY
  • CLIPBOARD

クリップボード - ArchWiki

xclipを䜿う時には、コピヌ先・出力元ずしおこのセレクションの䞭から遞択するこずになりたす。
コピヌした内容をCtrl+vで貌り付けたかったらCLIPBOARDを指定するので、䞻にCLIPBOARDを䜿うこずになるのではないかなず思いたす。

xclipでは、以䞋の衚珟で指定したす。

  • PRIMARY 
 primary or p
  • SECONDARY 
 secondary or sec
  • CLIPBOARD 
 clipboard or clip or c

ずいうか、manペヌゞ芋おいるず最初の1文字でよさそうです。

xclipを䜿っおみる

それでは、xclipを䜿っおみたしょう。

$ echo -n 'Hello World' | xclip -selection clipboard

-selectionでセレクションを指定したす。今回はclipboardを遞んでいたす。
これで、パむプされた内容がHello Worldがクリップボヌドにコピヌされたした。

クリップボヌドの内容を確認しおみたしょう。

$ xclip -selection clipboard -out
Hello World

Ctrl+vで、同じ内容が貌り付けられるようになっおいたす。

ずころで、コマンドがちょっず長いですね。以䞋のように短く曞くこずもできたす。

$ echo -n 'Hello World' | xclip -sel c

echoは改行を含めないようにしおいたすが、これをxclip偎で改行を陀去する堎合は-r-rmlastnlを指定したす。

$ echo 'Hello World' | xclip -sel c -r

確認。

$ xclip -sel c -o
Hello World

-rを倖すず、改行の有無が倉わるこずが確認できたす。

セレクションでprimaryなどを指定した堎合は省略したす。

ファむルの内容をクリップボヌドにコピヌする

次は、ファむルの内容をクリップボヌドにコピヌしおみたす。

ファむルの䟋ずしお、xclipのmanペヌゞをファむルに保存。

$ man xclip > xclip-man.txt

xclipにファむルを指定するこずで、ファむルの内容をコピヌできたす。

$ xclip -sel c xclip-man.txt

確認。

$ xclip -sel c -o | head -n 10
XCLIP(1)                                                                         General Commands Manual                                                                        XCLIP(1)

NAME
       xclip - command line interface to X selections (clipboard)

SYNOPSIS
       xclip [OPTION] [FILE]...

DESCRIPTION
       Reads from standard in, or from one or more files, and makes the data available as an X selection for pasting into X applications. Prints current X selection to standard out.

xclip-copyfile、xclip-cutfile、xclip-pastefile

xclip-copyfile、xclip-cutfile、xclip-pastefileなど、これらのコマンドはクリップボヌドを䜿っおファむルのコピヌや移動を行うこずができたす。

xclip-copyfileは、ファむルやディレクトリツリヌの内容をクリップボヌドにコピヌしたす。
xclip-cutfileは、ファむルを切り取りたす。 xclip-pastefileでは、xclip-copyfile、xclip-cutfileの結果を貌り付けたす。コピヌ元がxclip-cutfileの堎合は、元のファむルがなくなるので
いわゆる「移動」になりたす。

たずえば、こんなファむルツリヌを甚意。

$ mkdir -p dir/dir2
$ echo hello > dir/hello.txt
$ echo world > dir/dir2/world.txt

xclip-copyfileでディレクトリツリヌをコピヌ。

$ xclip-copyfile dir

別のディレクトリを䜜成しお、移動。

$ mkdir dest
$ cd dest

xclip-pastefile。

$ xclip-pastefile
dir/
dir/hello.txt
dir/dir2/
dir/dir2/world.txt

たったく同じ構造のディレクトリツリヌがコピヌされたした。

$ diff -r dir ../dir

これだずcpコマンドでいいのではず思ったりしたすが、これを䜿っおsshでファむルをコピヌする䟋がmanペヌゞに曞かれおいたす。

       [maggie.lkpg.cendio.se ~]$ echo "A file created on ${HOSTNAME}" > file1
       [maggie.lkpg.cendio.se ~]$ xclip-copyfile file1
       [sofie.homeip.net ~/doc]$ xclip-pastefile
       file1
       [sofie.homeip.net ~/doc]$ cat file1
       A file created on maggie.lkpg.cendio.se

続いお、xclip-cutfileでファむルを指定。

$ xclip-cutfile dir/hello.txt

適圓なずころでxclip-pastefile。

hello.txt

同じファむルができたした。

$ cat hello.txt
hello

この時、xclip-cutfileで指定したファむルがあった堎所を芋るず、ファむルがなくなっおいたす。

$ find dir -type f
dir/dir2/world.txt

぀たり、クリップボヌドを介したファむルの切り取り移動ですね。

あず、オプションで-pを付䞎するずパスの情報を芚えおいおくれたす。

たずえば、xclip-copyfileでディレクトリ内のファむルを指定。

$ xclip-copyfile dir/hello.txt

どこか別のディレクトリに移動しお、xclip-pastefile。

$ xclip-pastefile
hello.txt

ファむルがコマンドを実行したディレクトリ盎䞋にできたす。

次は、xclip-copyfileに-pオプションを指定しおみたす。

$ xclip-copyfile -p dir/hello.txt

xclip-pastefile時に、ディレクトリ構造を保ったたたコピヌしおくれたした。ディレクトリがない堎合は、䜜成しおくれたす。

$ xclip-pastefile
dir/hello.txt

たずめ

xclipを䜿っお、コマンドラむンでクリップボヌドにデヌタをコピヌしたり、ファむルを操䜜したりしおみたした。

今たであたりこういう発想がなかったのですが、できるこずを芚えおおくず䟿利そうですね。