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


13

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

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


1
xdg-openデフォルトで実際にこれを行うことができるはずです...引数リストをプログラムに渡すだけです。freedesktop.orgの人々に来てください!:-)
Ciro Santilli新疆改造中心法轮功六四事件

回答:


8

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

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

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

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

最初のファイルは名前に空白が含まれるファイルでは機能せず、2番目のファイルはまったく機能しません(find: paths must precede expression: -)。
スパラフーク

1
注意深く読んでいるなら、「もっと堅牢にしたいなら...」と書いたので、最初の単純なバージョンは実際にはスペースで動作しませんが、それは意図ではありませんでした。2番目のソリューションは、ubuntuで機能します。参考までに、findの新しいバージョンではデフォルトでパス名がになります。
Agoston Horvath

パスの欠如が2番目の問題であるかどうかはわかりません(エラーメッセージにもかかわらず)。入れようとする.と、同じエラーメッセージが表示されました。別のディレクトリで、のxdg-open: unexpected argument './foo.mp3'有無にかかわらず取得し.ます。
スパロウク

また、名前にスペースを入れることは、「単純な」場合でも無視されるべき珍しいシナリオではないと思います。
スパルホーク

確かに言うためにあなたの特定のセットアップについて十分に知りません、しかし、xdg-openは新しいubuntuインストールで説明したように動作します。不明な場合はman xdg-openをご覧ください。
Agoston Horvath

4

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

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

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


@karel -rフラグを追加しました。これは、名前に「\」が含まれるファイルを正しく解析するために必要だと思います。
スパルホーク

2
うーん...これは同じプログラムのいくつかのインスタンスを開きませんか?
ブライアム

@karelええ…私のman readフラグもまったくリストされていません!テストでエラーは発生しませんが、おそらくを作成aaaしたためaa\aです。この場合、でなく、2回xdg-openだけ開こうとします。(オーケー、少し回旋なってきたが、私はコードがすべての状況のために働くべきだと思います。おそらく、より良い選択肢である、の制限を回避するためにして。)また、どのようにそれは正確に大混乱をもたらすことができますか?の出力を解析するだけではありませんか?aaaaa\afindlsreadls
スパルホーク

@karel man readは、C関数read(男のセクション2)を参照しています。これreadはbash組み込みコマンドman bashです。したがって、4632行目を確認する必要があります。@ Sparhawk-edititngに感謝します。
ラドゥラディアナヌ

@Braiam umm ...これはmp3には当てはまらず、デフォルトのアプリケーションの設定に依存します。動作は、Nautilusまたはお気に入りのファイルマネージャーから複数のファイルを開くときと同じです。
ラドゥラデアヌ

4

小さなスクリプトを作成しましたが/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

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


1

この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

ワンライナーは次のとおりです。

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

VLCをインストールしているため(およびmp3のデフォルトとして)、VLCを含むディレクトリ内のすべてのmp3ファイルが開かれます。これは、「普遍的ですべて解決し、すべてがおかしくなってしまう場合」のようなものではありませんが、機能するはずです。

説明:

ls -AQp「ほぼすべての」ファイルをリストし、ファイル名を引用し、ディレクトリ名にスラッシュを追加します。交換する-p--file-typeあなたにもシンボリックリンクを除外したい場合。ファイル名にスペースがある場合の引用。

grep "\.mp3\"$" 「.mp3」(および二重引用符)で終わるファイルのみを選択します。

xargs 次のサブシェルが返すプログラムにロット全体をリダイレクトします。

サブシェル:

xdg-mime query default audio/mpeg与えデフォルトアプリパントマイムあるファイルのフォーマット『app.desktop』での名前をaudio/mpeg。を使用して、環境内の任意のファイルのmimetypeを確認できますxdg-mime query filetype /path/to/file。mp3-fileの「audio / mpeg」を取得しました。

grep -oP '.+(?=\.desktop)' 「app.desktop」から「アプリ」を取得します。

あまり変更しないシステムで非常に頻繁に使用する場合は、これを短くすることをお勧めします。

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

default_appファイルで開く実際のプログラムで置き換える場所。これで名前を把握できます:

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


xdg-open設計上1つの引数のみを受け入れるため、この問題は機能しません。を使用するとxargs -n1、問題のアプリが新しいインスタンスですべてのファイルを開く可能性があり、複数の方法でいものになる可能性があります。


-1

これらのコマンドを使用できます

cd /path/to/source_folder

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

音楽プレーヤーがコマンドライン引数として複数のファイルをサポートしている場合のみ。vlcお好みの音楽プレーヤーに交換してください。

私のテストでは、これはRhythmBoxとVLCで動作します。


find... -exec各ファイルで個別のコマンドを実行しませんか?また、音楽プレーヤーがコマンドライン引数として複数のファイルをサポートしている場合は、単に使用できますvlc *.mp3
スパラフーク

@Sparhawkない\+終わり
AB

@ABああ、いいですね。私は間違っていた。しかし、私の2番目の文にあるように、とにかくfindハードコーディングする場合は使用する意味がありませvlcん。(質問は、それらがすべて1つのディレクトリにあることを示唆しています。)
Sparhawk

だけ+で十分です\+
グリュンベル

-1

VLCでファイルを開く場合は、mp3ファイルに対してこのコマンドを使用します。

vlc /directory/*.mp3

注:cvlcインターフェイスなしでVLCを使用するために使用します。


3
質問は「デフォルトのプログラム」であるため、VLCを直接使用するのは少し...無意味です。
ムル14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.