在 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
我也发现了这个洛利卡普命令看起来很有希望,但尽管我可以检索这些值,但我无法存储它们并成功地检索loliclip
它们pcmanfm
。
您还应该能够用几行代码来实现它perl-tk
。
答案2
基于这些答案,我编写了一个filetoclip
Python 脚本,它将命令行上指定的文件复制到剪贴板。
本质上,所需要的只是在复制到剪贴板之前对它们进行绝对化并对“奇怪”字符进行百分比编码。实际的剪贴板操作被委托给xclip
,因为直接从 Python 使用剪贴板比预期的更痛苦。
#!/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
:它仅处理文本,而不处理文件或目录。