Как открыть несколько файлов с программой по умолчанию из терминала?

Я пытался открыть все мои файлы .mp3 из папки, используя xdg-open, но обнаружил, что открывается только один! Поэтому я немного искал, но такого вопроса не было! Я нашел «evince», но, по-видимому, он открывает текстовые файлы, и gnome-open также открывает один файл.

Я хочу открыть все файлы одного формата в папке из терминала. Я новичок в Ubuntu, поэтому, пожалуйста, объясните немного больше.

12
задан 26 October 2013 в 05:36

7 ответов

В самом деле. Вы можете использовать оболочку, чтобы обойти это, например:

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

Или, если вы хотите, чтобы это было более надежным, попробуйте

find -iname '*.mp3' -print0 | xargs -0 -n 1 xdg-open
0
ответ дан 26 October 2013 в 05:36

Вы можете попробовать:

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

ls *.mp3 перечислить все mp3-файлы из текущего каталога, каждый в отдельной строке, и результат будет передан в цикл while, который читает содержимое каждой строки, и оно откроет этот контент (в данном случае это имя mp3-файла) в приложении по умолчанию.

0
ответ дан 26 October 2013 в 05:36

Вы можете использовать эти команды

cd /path/to/source_folder

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

, только если ваш музыкальный проигрыватель поддерживает несколько файлов в качестве аргументов командной строки. Замените vlc на свой музыкальный проигрыватель.

Это работает с RhythmBox и VLC в моем тестировании.

0
ответ дан 26 October 2013 в 05:36

Вот одна строка:

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

Поскольку у меня установлен VLC (и по умолчанию для mp3s), это открывает все mp3-файлы в каталоге с VLC для меня. Это не какой-то « универсальный способ решить все и работать в каждом безумном случае », но он должен работать.

Объяснение:

ls -AQp перечисляет «почти все» файлы, цитирует имена файлов и добавляет косую черту к именам каталогов. Замените -p на --file-type, если вы хотите также исключить символические ссылки. Цитирование в случае пробелов в именах файлов.

grep "\.mp3\"$" выбирает только файлы, заканчивающиеся на «.mp3» (плюс двойные кавычки).

xargs перенаправляет весь лот на программу, возвращаемую после подоболочки.

subshell:

xdg-mime query default audio/mpeg дает имя приложения по умолчанию в формате "app.desktop" для файлов с mime audio/mpeg. Вы можете проверить mimetype для любого файла в вашей среде с помощью xdg-mime query filetype /path/to/file. Я получил "аудио / MPEG" для mp3-файла.

grep -oP '.+(?=\.desktop)' получает «app» из «app.desktop».

Если вы собираетесь использовать его очень часто в системе, которая не будет сильно меняться, вы можете сократить его до следующего:

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

Где вы замените default_app фактическим программа, которая открывается с файлами. Вы можете выяснить его имя следующим образом:

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


xdg-open не будут работать с этой проблемой, потому что она принимает только один аргумент. Если вы используете xargs -n1, вы, вероятно, будете поражены тем, что рассматриваемое приложение может открывать каждый файл в новом экземпляре, что может стать уродливым более чем одним способом.

0
ответ дан 26 October 2013 в 05:36

Я написал этот bash сценарий, чтобы охватить все возможные варианты использования:

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

Особенности:

  • Записывает вывод ошибок в ~ / .xsession- ошибки вместо того, чтобы загрязнять терминал или выбрасывать его
  • По умолчанию открывается максимум 10 файлов (чтобы не перегружать экран / процессор)
  • Можно установить новый максимум с помощью max=20 open $(ls -Q)
  • Разрешить открытие всех файлов, например all=1 open $(ls -Q)
0
ответ дан 26 October 2013 в 05:36

Используйте эту команду для файлов mp3, если вы хотите открывать файлы в VLC.

vlc /directory/*.mp3

Примечание. Используйте cvlc для использования VLC без интерфейса.

0
ответ дан 26 October 2013 в 05:36

Я написал небольшой скрипт /usr/local/bin/o, хотя вы можете просто вызвать его /usr/local/bin/xdg-open и заменить команду по умолчанию, если хотите (при условии, что ваш $PATH отдает ей приоритет). Также, если аргумент не указан, этот скрипт откроет текущий каталог.

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

Если вы не хотите открывать текущий каталог без аргументов, это сохраняет поведение по умолчанию, то есть показывает использование.

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

Н.Б. это не зависит от способности программы по умолчанию анализировать несколько аргументов, но вместо этого будет вызывать каждую команду один раз для каждого аргумента. Я не думаю, что есть элегантный способ обойти это, так как пользователи могут захотеть xdg-open разного рода файлов, и некоторые команды все равно не будут принимать несколько аргументов.

0
ответ дан 26 October 2013 в 05:36

Другие вопросы по тегам:

Похожие вопросы: