Existe um comando "abrir com" para a linha de comando?

24

A linha de comando tem uma maneira de obter uma lista recomendada de programas usados ​​para abrir um arquivo específico, com base no tipo de arquivo? Por exemplo, um .pdfarquivo teria uma open with...recomendação usando os programas Evincee Document Viewer.

Eu uso a linha de comando para a maioria das coisas, mas às vezes esqueço o nome de um programa que quero usar para abrir um tipo específico de arquivo.

BTW eu estou usando o Ubuntu 13.10.

pro-tip

Graças à resposta selecionada de @slm abaixo, criei o seguinte script bash em um arquivo chamado openwith.sh:

xdg-mime query default $(xdg-mime query filetype $1)

Adicione como um alias ou execute diretamente como um openwithcomando.

modulitos
fonte
11
Você pode tentar com gnome-open file. Eu adicionei alias o='gnome-open'ao meu .bashrcpor simplicidade.
Pål GD
gnome-openfunciona de forma semelhante a xdg-open.
Slm
Aparentemente, o mesmo acontece gvfs-open. Pergunta O que posso usar em vez do gnome-open? de perguntar ao Ubuntu .
Pål GD

Respostas:

33

Não existe um comando que eu já tenha visto que funcione como "aberto com ...", mas você pode usar o comando xdg-open <file>para abrir um dado <file>no aplicativo associado a esse tipo específico de arquivo.

Exemplos

Abrindo um arquivo de texto:

$ xdg-open tstfile.txt
$

Resultando no arquivo tstfile.txtsendo aberto em gedit:

                         ss do gedit

Abrindo um documento do LibreOffice Writer:

$ xdg-open tstfile.odt 
$

Resultando no arquivo tstfile.odtsendo aberto no Writer:

                         ss do escritor

Quais aplicativos são usados?

Você pode usar xdg-mimepara consultar o sistema para descobrir quais aplicativos estão associados a um determinado tipo de arquivo.

$ xdg-mime query default $(xdg-mime query filetype tstfile.txt)
gedit.desktop calibre-ebook-viewer.desktop

$ xdg-mime query default $(xdg-mime query filetype tstfile.odt)
libreoffice-writer.desktop calibre-ebook-viewer.desktop

Esta é uma operação em duas etapas. Primeiro, estou consultando o tipo MIME de um determinado arquivo xdg-mime query filetype tstfile.txt, que retornará text/plain. Isso é usado para executar outra pesquisa para descobrir a lista de aplicativos associados a esse tipo de mímica. Como você pode ver acima, tenho 2 aplicativos associados gedite calibre, para .txtarquivos.

Você pode usar xdg-mimepara alterar as associações também. Veja man xdg-mimepara mais detalhes.

slm
fonte
Existe uma maneira de exibir outros tipos de programas além dos padrão? Por exemplo, eu acabei de instalar okularpara visualizar PDFs, mas seu exemplo acima só aparece evincequando eu o executo em um arquivo .pdf.
Modulitos
11
@ Lucas - sim, os exemplos que mostrei mostram os aplicativos associados a um determinado tipo de arquivo acima. Por ex. arquivos do tipo .txtestão associados ao gedit e calibre, por exemplo.
slm
Preciso ter .desktoparquivos para os programas que desejo listados? Por exemplo, quando executo o script em um .pdfarquivo, ele retorna evince.desktop, mesmo que eu possa executar okulartambém.
Modulitos
@ Lucas - isso é provavelmente o melhor pedido como um novo Q, já que estamos nos afastando do Q original agora.
Slm
5

Se você trabalha principalmente na linha de comando, pode ver um gerenciador de arquivos baseado em maldições, como ranger ou vifm . Ambos permitem definir ações padrão para tipos de arquivos.

No vifm, por exemplo, ~/.vifm/vifmrcé possível definir associações da seguinte forma:

" Images
filetype *.jpg,*.jpeg,*.gif,*.tif,*.png,*.bmp sxiv 

" Media
filetype *.flv,*.avi,*.mp4,*.mpeg,*.mpg,*.mov,*.ogg,*.ogv,*.mkv mpv 

" Web
filetype *.html,*.htm,*.shtml /home/jason/Scripts/vimprobtab.sh 

" PDF
filetype *.pdf apvlv

Ao Enterpressionar o cursor em qualquer arquivo com uma das ações definidas, ele será aberto pelo aplicativo relevante. Como você pode ver no caso de .htmlarquivos, você pode acionar um script e um aplicativo.

jasonwryan
fonte
5

Mais ou menos, mas isso mudará o aplicativo padrão como resultado. Não sei ao certo em que outros sistemas operacionais isso funciona, mas as instruções abaixo funcionam para o Ubuntu 12.04 - Desktop X86-64. Como não tinha arquivos PDF à mão, testei com um arquivo .zip.

Etapas gerais

Passo 1

Em um tipo de terminal:

$ mimeopen -d /home/username/example.zip
captura de tela # 1 = https://copy.com/qfWSZaZ4FzlA

    ss # 1

Passo 2

Escolha na lista digitando #o aplicativo desejado e pressionando enter. O arquivo será aberto imediatamente no aplicativo que você escolheu.

captura de tela # 2 = https://copy.com/um6Rf7zRdceT

    ss # 2

captura de tela # 3 = https://copy.com/ytwKCqR6nv8i

    ss # 3

Notas

Nota 1

Isso altera o aplicativo padrão para o que você escolher e, assim que você abrir esse tipo de arquivo, ele será aberto em qualquer aplicativo que você escolher pela última vez na lista.

por favor me apague
fonte
Você quis colocar um sinal de hash (#) no URL da captura de tela 3?
trysis
@trysis Acabei de usá-lo para contornar o limite máximo de 2 URLs.
delete delete me
Oh, faz sentido. Ainda parece estranho, no entanto.
trysis
Limpei você A e adicionei o terceiro URL para você.
Slm
2

Depende do sabor do Unix que você está usando, eu acho. No OS X, você pode usar o opencomando:

OPEN(1)                   BSD General Commands Manual                  OPEN(1)

NAME
     open -- open files and directories

SYNOPSIS
     open [-e] [-t] [-f] [-F] [-W] [-R] [-n] [-g] [-h] [-b bundle_identifier]
          [-a application] file ... [--args arg1 ...]

DESCRIPTION
     The open command opens a file (or a directory or URL), just as if you had
     double-clicked the file's icon. If no application name is specified, the
     default application as determined via LaunchServices is used to open the
     specified files.

     If the file is in the form of a URL, the file will be opened as a URL.

...
Ionoclast Brigham
fonte
Além disso, o opencomando apareceu pela primeira vez no NextStep e foi herdado pelo OS X, portanto, pode estar disponível de alguma forma em outras plataformas mais ou menos baseadas no OpenStep (por exemplo, AfterStep, LiteStep).
Ionoclast Brigham