web-dev-qa-db-fra.com

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

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! Alors j'ai 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 veux ouvrir tous les fichiers du même format dans un dossier du terminal. Je suis nouveau sur Ubuntu, alors merci d’expliquer un peu plus.

11
karo

Effectivement. Vous pouvez utiliser Shell pour contourner cela, comme ceci:

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

Ou, si vous voulez plus robuste, essayez

find -iname '*.mp3' -print0 | xargs -0 -n 1 xdg-open
7
Agoston Horvath

Tu peux essayer:

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

ls *.mp3 liste tous les fichiers mp3 du répertoire en cours, chacun sur sa propre ligne, et la sortie est dirigée vers une boucle while qui lira le contenu de chaque ligne et l'ouvrira (ce qui est le nom d’un fichier mp3 dans ce cas) dans son application par défaut.

4
Radu Rădeanu

J'ai écrit un petit script /usr/local/bin/o, bien que vous puissiez simplement l'appeler /usr/local/bin/xdg-open et remplacer la commande par défaut si vous le souhaitez (en supposant que votre $PATH lui donne la priorité). De plus, si aucun argument n’est donné, ce script ouvrira le répertoire en cours.

#!/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 souhaitez pas ouvrir le répertoire en cours sans argument, le comportement par défaut, à savoir l'utilisation, est conservé.

#!/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. Cela ne dépend pas de la capacité du programme par défaut à analyser plusieurs arguments, mais à la place, nous appelons chaque commande une fois pour chaque argument. Je ne pense pas qu'il y ait une manière élégante de contourner cela, car les utilisateurs peuvent vouloir xdg-open différents types de fichiers, et certaines commandes ne prendront de toute façon pas plusieurs arguments.

3
Sparhawk

J'ai écrit ce script bash 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

Fonctionnalités:

  • Écrit la sortie d'erreur dans ~/.xsession-errors plutôt que de polluer le terminal ou de le jeter.
  • Par défaut, ouvrir un maximum de 10 fichiers (pour ne pas surcharger l'écran/le 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)
0
Tom Hale