In a GUI file manager it is possible to select a few files, press Ctrl-C (which supposedly copies come info about the files to clipboard), then navigate to another folder and press Ctrl-V, which will then copy the files into that directory.
As an experiment, after copying files in the file manager, it is possible to switch to a text editor – pressing Ctrl-V there pastes a list of absolute filenames. The reverse process (copying a list of files from a text editor and pasting them to a file manager) does not work, which is supposedly due to different target atoms
The goal of the exercise is to be able to copy some files from command line, for example
find ${PWD} -name "*.txt" | xclip <magic parameters>
then switch to a file manager and copy them all to a directory using File->Paste.
So, the question is: What parameters of xclip (or other program) do I need to specify so file manager recognizes the selection as a list of files and enables its Paste menu item?
Alternatively, is there a low-level tool which would allow to inspect the contents of X selection and see what data it currently contains?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Yes, basically, you’d need to offer the CLIPBOARD selection either as
-
text/uri-listwith the content being/path/to/file1 /path/to/file2
-
application/x-kde-cutselectionorx-special/gnome-copied-fileswith contentcopynfile://$path1nfile://$path2orcutnfile://$path1nfile://$path2...
With xclip you can achieve this with something like
find "$PWD" -name "*.pdf"| xclip -i -selection clipboard -t text/uri-list
I’ve also found this loliclip command that looked promising, but though I could retrieve the values, I wasn’t able to store them and have them retrieved from loliclip by pcmanfm successfully.
You also should be able to implement it in a few lines of perl-tk.
Method 2
why not just make find do it for you?
find ${PWD} -name "*.txt" -exec cp {} /full/path ; && gnome-open /full/path &
EDIT: from what I understand from man xclip: it handles text only, not files or directories.
Method 3
Based on these answers I wrote a filetoclip Python script, which copies to the clipboard the files specified on the command line.
Essentially, all that’s needed is to absolutize them and percent-encode “strange” characters before copying to the clipboard. The actual clipboard operation is delegated to xclip, as working with clipboard straight from Python is more painful than expected.
#!/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)
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0