コマンドラインからクリップボードにファイルをコピーする

コマンドラインからクリップボードにファイルをコピーする

GUIファイルマネージャで複数のファイルを選択し、Ctrl-C(ファイルに関する情報をクリップボードにコピー)をクリックして別のフォルダに移動し、Ctrl-Vを押してファイルをそのディレクトリにコピーできます。フォルダ。

実験的に、ファイルマネージャからファイルをコピーしてテキストエディタに切り替えることができます。 Ctrl-Vを押して絶対ファイル名のリストを貼り付けます。反対のプロセス(テキストエディタからファイルリストをコピーしてファイルマネージャに貼り付ける)は機能しません。おそらく他の理由のためです。目標原子

この練習の目的は、コマンドラインからいくつかのファイルをコピーできることです。

find ${PWD} -name "*.txt" | xclip <magic parameters>

次に、ファイルマネージャに切り替えて、ファイル - >貼り付けを使用してすべてのディレクトリにコピーします。

したがって、質問は次のようになります。xclipファイルマネージャが選択項目をファイルリストとして認識し、「貼り付け」メニュー項目を有効にするには、どのパラメータを指定する必要がありますか(または他のプログラムに)?

または、Xが選択したアイテムの内容を確認し、現在含まれているデータを確認できる低レベルのツールはありますか?

答え1

はい、デフォルトでは、次のようにクリップボード選択機能を提供する必要があります。

  • text/uri-list内容は

    /path/to/file1
    /path/to/file2
    
  • application/x-kde-cutselectionまたはx-special/gnome-copied-files内容copy\nfile://$path1\nfile://$path2\0またはcut\nfile://$path1\nfile://$path2...\0

次の方法でxclipこれを達成できます。

find "$PWD" -name "*.pdf"| xclip -i -selection clipboard -t text/uri-list

私もこれを見つけました。ロリカルフコマンドは有望に見えますが、値を取得できますが、その値を保存して正常に検索することはできませloliclippcmanfm

また、数行のコードでこれを実装することもできますperl-tk

答え2

これらの答えに基づいて、コマンドラインfiletoclipで指定されたファイルをクリップボードにコピーするPythonスクリプトを作成しました。

本質的に必要なのは、これを解決し、「奇妙な」文字をクリップボードにコピーする前にパーセントエンコードすることです。xclipPythonで直接クリップボードを使用することは予想よりも痛いため、実際のクリップボード操作は委任されます。

#!/usr/bin/env python3
import os.path
import sys
from urllib.parse import quote
from subprocess import run
out = [os.fsencode('file://' + quote(os.path.abspath(x))) for x in sys.argv[1:]]
run(['xclip', '-i', '-selection', 'clipboard', '-t', 'text/uri-list'],
    input=b'\n'.join(out), check=True)

答え3

なぜfindあなたのためにそれをしないのですか?

find ${PWD} -name "*.txt" -exec cp {} /full/path \; && gnome-open /full/path &

編集:私が理解している限りman xclip:ファイルやディレクトリではなくテキストだけを処理します。

関連情報