Copiando arquivos da linha de comando para a área de transferência

18

Em um gerenciador de arquivos da GUI, é possível selecionar alguns arquivos, pressione Ctrl-C (que supostamente copia informações sobre os arquivos para a área de transferência), depois navegue para outra pasta e pressione Ctrl-V, que copiará os arquivos para aquela diretório.

Como um experimento, após copiar arquivos no gerenciador de arquivos, é possível alternar para um editor de texto - pressionando Ctrl-V, cola-se uma lista de nomes de arquivos absolutos. O processo inverso (copiar uma lista de arquivos de um editor de texto e colá-los em um gerenciador de arquivos) não funciona, o que é supostamente devido a diferentes átomos de destino

O objetivo do exercício é poder copiar alguns arquivos da linha de comando, por exemplo

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

depois mude para um gerenciador de arquivos e copie todos eles para um diretório usando Arquivo-> Colar.

Portanto, a pergunta é: Quais parâmetros xclip(ou outro programa) eu preciso especificar para que o gerenciador de arquivos reconheça a seleção como uma lista de arquivos e ative o item de menu Colar?

Como alternativa, existe uma ferramenta de baixo nível que permita inspecionar o conteúdo da seleção X e ver quais dados ela contém atualmente?

Sergey
fonte

Respostas:

12

Sim, basicamente, você precisaria oferecer a seleção CLIPBOARD como

  • text/uri-list com o conteúdo sendo

    /path/to/file1
    /path/to/file2
    
  • application/x-kde-cutselectionou x-special/gnome-copied-filescom conteúdo copy\nfile://$path1\nfile://$path2\0oucut\nfile://$path1\nfile://$path2...\0

Com xclipvocê pode conseguir isso com algo como

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

Também achei esse comando loliclip que parecia promissor, mas, embora eu pudesse recuperar os valores, não consegui armazená-los e recuperá-los loliclipcom pcmanfmêxito.

Você também deve poder implementá-lo em algumas linhas de perl-tk.

Stéphane Chazelas
fonte
Ok, depois de alguns ajustes, a text/uri-listvariante funcionou para mim - sou capaz de copiar coisas da linha de comando e colar arquivos no gerenciador de arquivos Dolphin. Nem sequer requer file://prefixos, o que faz com que o comando funcione bem find. Editei sua pergunta para adicionar o comando que funciona para mim no KDE - alguém pode testá-lo no Gnome ou em outro lugar?
Sergey
Obrigado pela edição. Parece que o file://também não é necessário pcmanfm(embora o pcmanfm o inclua em si). Suponho que alguns caracteres especiais (no mínimo, LF) devam ser codificados em URI.
Stéphane Chazelas
Sim. Posso confirmar que você precisa usar file:///new%0Alinepara arquivos que contêm um caracteres de nova linha, embora qualquer outro caractere (incluindo não-ASCII em qualquer codificação) parece estar bem (com pcmanfm pelo menos)
Stéphane Chazelas
1

Por que não findfazer isso por você?

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

EDIT: pelo que entendi man xclip: ele lida apenas com texto, não com arquivos ou diretórios.

h3rrmiller
fonte
Principalmente porque é um experimento, embora eu ache que "copiar arquivos para a área de transferência agora, decida onde você deseja colá-los mais tarde" seria uma maneira útil de fazer as coisas.
Sergey