我有一个 nautilus 脚本,它根据 nautilus 窗口中选择的文件生成存档文件。该归档文件是在/tmp
目录中创建的。我想要一种方法复制将此文件从脚本复制到剪贴板,以便用户只需转到桌面或主目录并将其粘贴即可。
我尝试使用xclip
and执行此操作xsel
,但它们似乎没有复制文件复制操作,而是复制文件的内容。
xclip -in -selection c generated-archive
echo -n generated-archive | xsel --clipboard --input
他们都没有做我需要的事情。
所以我想知道这是否可行,如果可行,我该怎么办?
谢谢。
答案1
看起来 Nautilus 会跟踪剪贴板更改的内部状态,这意味着剪贴板状态的任何更改(包括用相同的文件路径字符串替换)都会自动取消粘贴待处理状态,因此当外部加载的剪贴板包含有效的文件路径时什么也不会发生...
Nautilus 只识别文件复制/剪切这是从 Nautilus 内部发起的。
这正是您所观察到的......也许有一些关于原因的解释......我在 Nautilus 源“剪切-粘贴-代码”中注意到它包含很多有关保存状态的信息。
# In Nautilus, manually "copy" a file (to the clipboard) using Ctrl+C
xsel -ob |xxd # hex-display clipboard contents of the clipboard
echo "### At this point, Nautilus **paste** works."
read # pause
xsel -ob |xsel -ib # Replace clipboard with itself
xsel -ob |xxd # hex-display clipboard contents again
echo "### At this point, Nautilus **paste** does NOT work."
手动复制/剪切后,您可以执行无尽的操作(在 Nautilus 或其他地方),并且 Ctrl+V粘贴在 Nautilus 中可以工作,但是一旦你修改剪贴板,它就不会“粘贴”......
答案2
您应该明白,当您将文件“复制”到 nautilus 中的剪贴板时,您实际上所做的就是将绝对文件路径放在剪贴板上(您可以使用剪贴板管理器来验证这一点)。因此,您只需让脚本将文件路径放在剪贴板上,您就会获得您正在寻找的结果。尝试一下!