web-dev-qa-db-ja.com

ターミナルからデフォルトのプログラムで複数のファイルを開く方法は?

xdg-openを使用して、フォルダからすべての.mp3ファイルを開こうとしましたが、1つしか開かないことがわかりました。それで少し検索しましたが、そんな質問はありませんでした! 「evince」を見つけましたが、どうやらテキストファイルを開き、gnome-openも1つのファイルを開きます。

ターミナルからフォルダー内の同じ形式のすべてのファイルを開きたい。私はUbuntuが初めてなので、もう少し説明してください。

11
karo

確かに。次のように、シェルを使用してこれを回避できます。

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

または、より堅牢にしたい場合は、試してください

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

あなたが試すことができます:

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

ls *.mp3は、現在のディレクトリからすべてのmp3ファイルをリストします。各ファイルはそれぞれ独自の行にあり、出力はwhileループにパイプされ、各行のコンテンツを読み取ります。はデフォルトのアプリケーションのmp3ファイルの名前です(この場合)。

4
Radu Rădeanu

小さなスクリプト/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

N.B.これは、複数の引数を解析するデフォルトのプログラムの機能については不可知ですが、代わりに各引数に対して各コマンドを1回呼び出します。ユーザーがさまざまな種類のファイルをxdg-openしたいと思うかもしれず、いくつかのコマンドはとにかく複数の引数をとらないかもしれないので、私はこの周りにエレガントな方法があるとは思わない。

3
Sparhawk

この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-errorsに書き込みます
  • デフォルトでは、最大10個のファイルが開かれます(画面/プロセッサに過負荷をかけないため)
  • max=20 open $(ls -Q)で新しい最大値を設定できます
  • すべてのファイルを開くことを許可します。例:all=1 open $(ls -Q)
0
Tom Hale