comment ouvrir plusieurs fichiers avec le programme par défaut du terminal?

13

J'ai essayé d'ouvrir tous mes fichiers .mp3 à partir d'un dossier en utilisant xdg-open mais j'ai découvert qu'il n'en ouvre qu'un seul! J'ai donc cherché un peu mais il n'y avait pas une telle question! J'ai trouvé "evince" mais apparemment, il ouvre des fichiers texte et gnome-open ouvre également un fichier.

Je souhaite ouvrir tous les fichiers du même format dans un dossier du terminal. Je suis nouveau sur Ubuntu, veuillez expliquer un peu plus.

karo
la source
1
xdg-opendevrait vraiment être en mesure de le faire par défaut ... il suffit de passer la liste des arguments au programme. Venez sur freedesktop.org! :-)
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Réponses:

8

En effet. Vous pouvez utiliser shell pour contourner cela, comme ceci:

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

Ou, si vous le voulez plus robuste, essayez

find -iname '*.mp3' -print0 | xargs -0 -n 1 xdg-open
Agoston Horvath
la source
Le premier ne fonctionne pas avec des fichiers avec des espaces en leur nom, et le second ne fonctionne pas du tout ( find: paths must precede expression: -).
Sparhawk
1
Si vous lisez attentivement, je l' ai écrit « si vous voulez plus robuste ... », d' où la première, version simple ne fonctionne pas avec des espaces en effet, mais ce ne fut pas l'intention. La deuxième solution fonctionne avec ubuntu; Pour votre information, les nouvelles versions de trouver le chemin par défaut à.
Agoston Horvath
Je ne suis pas sûr que l'absence de chemin est le problème dans la seconde (malgré le message d'erreur). J'ai essayé de mettre en .et a obtenu le même message d'erreur. Dans un autre répertoire, je reçois xdg-open: unexpected argument './foo.mp3'avec ou sans ..
Sparhawk
Aussi, je pense que d' avoir des espaces dans les noms ne sont pas si rare un scénario qu'il devrait être écartée, même dans les cas de « simples ».
Sparhawk
Je ne sais pas assez sur votre configuration spécifique pour le dire avec certitude, mais xdg-open fonctionne comme je l'ai décrit lors d'une nouvelle installation d'ubuntu. Voir man xdg-open en cas de doute.
Agoston Horvath
4

Tu peux essayer:

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

ls *.mp3liste tous les fichiers mp3 du répertoire courant, chacun sur sa propre ligne, et la sortie est dirigée vers une whileboucle qui lit le contenu de chaque ligne et il ouvrira ce contenu (qui est le nom d'un fichier mp3 dans ce cas ) dans son application par défaut.

Radu Rădeanu
la source
@karel J'ai ajouté le -rdrapeau. Je pense que cela est nécessaire pour analyser correctement les fichiers avec un `\ 'dans leur nom.
Sparhawk
2
umm ... cela n'ouvrira-t-il pas plusieurs instances du même programme?
Braiam
@karel Ouais… mon man readn'a pas de drapeaux du tout aussi! Je n'ai pas d'erreur dans mes tests, mais c'est probablement parce que j'ai créé aaaet aa\a. Dans ce cas, xdg-openessaie juste d'ouvrir aaadeux fois, et non aa\a. (D'accord, cela devient un peu compliqué, mais je pense que le code devrait fonctionner pour toutes les situations. Peut find- être est-ce une meilleure option, pour éviter les limitations de lset read.) De plus, comment peut-il faire des ravages exactement? N'est-ce pas seulement pour analyser la sortie de ls?
Sparhawk
@karel man readse réfère à la fonction C lue (section 2 de l'homme). Il reads'agit d'une commande bash intégrée, vous devriez donc regarder man bashquelque part à la ligne 4632. @Sparhawk - merci pour edititng.
Radu Rădeanu du
@Braiam umm ... ce n'est pas le cas pour les mp3 et cela dépend des paramètres de l'application par défaut. Le comportement est le même que lorsque vous ouvrez plusieurs fichiers depuis Nautilus ou votre gestionnaire de fichiers préféré.
Radu Rădeanu
4

J'ai écrit un petit script /usr/local/bin/o, bien que vous puissiez simplement l'appeler /usr/local/bin/xdg-openet remplacer la commande par défaut si vous le souhaitez (en supposant que votre $PATHlui donne la priorité). De plus, s'il ne reçoit aucun argument, ce script ouvrira le répertoire actuel à la place.

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

Si vous ne voulez pas ouvrir le répertoire courant sans argument, cela conserve le comportement par défaut, c'est-à-dire montre l'utilisation.

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

NB ceci est indépendant de la capacité du programme par défaut à analyser plusieurs arguments, mais appellera à la place chaque commande une fois pour chaque argument. Je ne pense pas qu'il existe un moyen élégant de contourner cela, car les utilisateurs peuvent vouloir xdg-opendifférents types de fichiers, et certaines commandes ne prendront pas de multiples arguments de toute façon.

Sparhawk
la source
1

J'ai écrit ce bashscript pour couvrir tous les cas d'utilisation auxquels je pouvais penser:

#!/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

Caractéristiques:

  • Écrit la sortie d'erreur dans ~ / .xsession-errors plutôt que de polluer le terminal ou de le jeter
  • Par défaut, l'ouverture d'un maximum de 10 fichiers (pour ne pas surcharger l'écran / processeur)
  • Peut définir un nouveau maximum avec max=20 open $(ls -Q)
  • Autoriser l'ouverture de tous les fichiers, par exemple all=1 open $(ls -Q)
Tom Hale
la source
0

Voici un one-liner:

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

Comme je l' ai installé VLC (et par défaut pour les mp3s), cela ouvre tous les fichiers mp3 dans un répertoire avec VLC pour moi. Ce n'est pas une sorte de « universel résoudre-it-all-et-travail en tous les cas-paniquer », mais il devrait fonctionner.

Explication:

ls -AQplistes « presque tous » les fichiers, citant les noms de fichiers et en ajoutant aux noms des slash répertoires. Remplacer -pavec --file-typesi vous souhaitez exclure des liens symboliques aussi bien. Citant en cas d'espaces dans les noms de fichiers.

grep "\.mp3\"$" sélectionne uniquement les fichiers qui se termine par » .mp3" (plus guillemet).

xargs réoriente l'ensemble du lot au programme suivant retourne sous-shell.

sous-shell:

xdg-mime query default audio/mpegdonne l' application par défaut le nom de » au format « app.desktop » pour les fichiers dont le mime est audio/mpeg. Vous pouvez vérifier mimetype pour tout fichier dans votre environnement avec xdg-mime query filetype /path/to/file. Je suis « audio / mpeg » pour le fichier mp3.

grep -oP '.+(?=\.desktop)' obtient la « app » de « app.desktop ».

Si vous allez l'utiliser très souvent dans un système qui ne va pas beaucoup changer, vous pouvez raccourcir à ceci:

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

Où vous remplacez default_apple programme réel qui ouvre les fichiers. Vous pouvez trouver son nom avec ceci:

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


xdg-openne fonctionnera pas avec ce problème, car il accepte un seul argument par la conception. Si vous utilisez xargs -n1, vous êtes propably gona a frappé le mur avec que l'application résultant en question pourrait ouvrir chaque fichier dans une nouvelle instance, ce qui pourrait devenir laid dans plus d'une façon.

F-3000
la source
-1

Vous pouvez utiliser ces commandes

cd /path/to/source_folder

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

uniquement si votre lecteur de musique prend en charge plusieurs fichiers comme arguments de ligne de commande. Remplacez-le vlcpar votre lecteur de musique de choix.

Cela fonctionne avec RhythmBox et VLC dans mes tests.

kiri
la source
N'exécute pas find... -execdes commandes individuelles sur chaque fichier? Et aussi, si votre lecteur de musique prend en charge plusieurs fichiers comme arguments de ligne de commande, vous pouvez simplement les utiliser vlc *.mp3.
Sparhawk
@Sparhawk Pas avec \+à la fin
AB
@AB Ah oui, bon point; J'avais tort. Cependant, selon ma deuxième phrase, il semble inutile d'utiliser findsi vous allez coder en dur de vlctoute façon. (La question suggère qu'ils sont tous dans un seul répertoire.)
Sparhawk
C'est juste +assez, pas besoin \+.
Grumbel
-1

Utilisez cette commande pour les fichiers mp3 si vous souhaitez ouvrir des fichiers dans VLC.

vlc /directory/*.mp3

Remarque: Utilisez cvlcpour utiliser VLC sans interface.

karo
la source
3
La question dit "programme par défaut", donc utiliser VLC directement est un peu ... inutile.
muru