como abrir vários arquivos com o programa padrão do terminal?

11

Eu tentei abrir todos os meus arquivos .mp3 de uma pasta usando xdg-open , mas descobri que ele abre apenas um! Então eu procurei um pouco, mas não havia essa pergunta! Eu encontrei "evince" mas, aparentemente, abrir arquivos de texto e o gnome-open também abre um arquivo.

Eu quero abrir todos os arquivos do mesmo formato em uma pasta do terminal. Eu sou novo no Ubuntu, então, por favor, explique um pouco mais.

    
por karo 11.10.2013 / 11:04

7 respostas

7

De fato. Você poderia usar o shell para contornar isso, assim:

ls -b *.mp3 | xargs -n 1 xdg-open

Ou, se você quiser mais robusto, tente

find -iname '*.mp3' -print0 | xargs -0 -n 1 xdg-open
    
por Agoston Horvath 11.10.2013 / 11:14
4

Você pode tentar:

ls *.mp3 | while read -r file; do xdg-open "$file"; done

ls *.mp3 listará todos os arquivos mp3 do diretório atual, cada um em sua própria linha, e a saída será canalizada para um loop while que lerá o conteúdo de cada linha e abrirá esse conteúdo (que é o nome de um arquivo mp3 nesse caso) em seu aplicativo padrão.

    
por Radu Rădeanu 25.10.2013 / 17:39
1

Eu escrevi um pequeno script /usr/local/bin/o , embora você pudesse chamá-lo de /usr/local/bin/xdg-open e substituir o comando padrão se quisesse (assumindo que seu $PATH dá prioridade). Além disso, se não houver argumentos, esse script abrirá o diretório atual.

#!/usr/bin/env bash
if [ $# -eq 0 ]; then
  xdg-open . &> /dev/null
else
  for file in "$@"; do
    xdg-open "$file" &> /dev/null
  done
fi

Se você não quiser abrir o diretório atual sem argumento, isso mantém o comportamento padrão, ou seja, mostra o uso.

#!/usr/bin/env bash
if [ $# -eq 0 ]; then
  xdg-open &> /dev/null
else
  for file in "$@"; do
    xdg-open "$file" &> /dev/null
  done
fi

N.B. isso é agnóstico sobre a capacidade do programa padrão de analisar vários argumentos, mas em vez disso, chamará cada comando uma vez para cada argumento. Eu não acho que haja uma maneira elegante de contornar isso, já que os usuários podem querer xdg-open tipos diferentes de arquivos, e alguns comandos não aceitarão vários argumentos de qualquer maneira.

    
por Sparhawk 22.07.2015 / 06:00
0

Aqui está um verso:

ls -AQp | grep "\.mp3\"$" | xargs 'xdg-mime query default audio/mpeg | grep -oP '.+(?=\.desktop)''

Como eu tenho VLC instalado (e como padrão para mp3s), isso abre todos os arquivos mp3 em um diretório com o VLC para mim. Isso não é qualquer tipo de " universal-resolver-tudo-e-trabalhar-em-todo-caso-em-maldito ", mas deve funcionar.

Explicação:

ls -AQp lista "quase todos os arquivos", citando nomes de arquivos e acrescentando barra a nomes de diretórios. Substitua -p por --file-type se desejar excluir também os links simbólicos. Citando no caso de espaços em nomes de arquivos.

grep "\.mp3\"$" seleciona apenas arquivos que terminam com ".mp3" (mais aspas duplas).

xargs redireciona todo o lote para programar depois dos retornos de subshell.

subshell:

xdg-mime query default audio/mpeg fornece o nome do aplicativo padrão no formato "app.desktop" para arquivos cujo mime é audio/mpeg . Você pode verificar o tipo MIME para qualquer arquivo em seu ambiente com xdg-mime query filetype /path/to/file . Eu tenho "audio / mpeg" para mp3-arquivo.

grep -oP '.+(?=\.desktop)' obtém o "aplicativo" de "app.desktop".

Se você for usá-lo com muita frequência em um sistema que não mudará muito, convém encurtá-lo para isso:

ls -AQp | grep "\.mp3\"$" | xargs default_app

Onde você substitui default_app pelo programa real que é aberto com os arquivos. Você pode descobrir seu nome com isso:

xdg-mime query default audio/mpeg | grep -oP '.+(?=\.desktop)'

xdg-open não funcionará com esse problema, porque aceita apenas um argumento por design. Se você estiver usando xargs -n1 , provavelmente você está indo para a parede com o fato de que o aplicativo resultante em questão pode abrir todos os arquivos em uma nova instância, que pode ficar feia de mais de uma maneira.     
por F-3000 08.07.2015 / 16:00
0

Eu escrevi este script bash para cobrir todos os casos de uso em que eu conseguia pensar:

#!/bin/bash
set -euo pipefail; shopt -s failglob # bash strict mode

max=${max:-10} # Set default maximum if $max is not set
[[ ${all:-} ]] && max=$# # Set max to all files if $all is non-null

for file in "${@:1:$max}"; do
  xdg-open "$file"
done &>>~/.xsession-errors

Recursos:

  • Grava a saída de erro em ~ / .xsession-errors em vez de poluir o terminal ou jogá-lo fora
  • O padrão é abrir um máximo de 10 arquivos (para não sobrecarregar a tela / processador)
  • É possível definir um novo máximo com max=20 open $(ls -Q)
  • Permitir a abertura de todos os arquivos, por exemplo, all=1 open $(ls -Q)
por Tom Hale 19.02.2017 / 08:25
-1

Você pode usar esses comandos

cd /path/to/source_folder

find . -type f -name *.mp3 -exec vlc {} \+

somente se o seu tocador de música suportar vários arquivos como argumentos de linha de comando. Substitua vlc pelo seu player de música de sua preferência.

Isso funciona com RhythmBox e VLC nos meus testes.

    
por kiri 26.10.2013 / 04:09
-1

Use este comando para arquivos mp3 se você quiser abrir arquivos no VLC.

vlc /directory/*.mp3

Nota: use cvlc para usar o VLC sem interface.

    
por karo 28.09.2014 / 00:01

Tags