如何使用终端的默认程序打开多个文件?
我尝试使用xdg-open
文件夹中的所有.mp3文件,但我发现它只打开一个! 所以我搜索了一下,但没有这样的问题! 我找到了“evince”但显然它是打开文本文件而gnome-open也会打开一个文件。
我想从终端打开文件夹中所有相同格式的文件。 我是Ubuntu的新手,所以请再解释一下。
确实。 您可以使用shell来解决这个问题,如下所示:
ls -b *.mp3 | xargs -n 1 xdg-open
或者,如果您希望它更强大,请尝试
find -iname '*.mp3' -print0 | xargs -0 -n 1 xdg-open
你可以试试:
ls *.mp3 | while read -r file; do xdg-open "$file"; done
ls *.mp3
列出当前目录中的所有mp3文件,每个文件都在其自己的行上,并且输出通过管道传送到while
循环,读取每行的内容,它将打开该内容(这是一个名称)在这种情况下的mp3文件)在其默认应用程序中。
我写了一个小脚本/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
不同类型的文件,并且一些命令无论如何都不会采用多个参数。
这是一个单行:
ls -AQp | grep "\.mp3\"$" | xargs `xdg-mime query default audio/mpeg | grep -oP '.+(?=\.desktop)'`
由于我安装了VLC(并且作为mp3的默认设置),这将打开包含VLC的目录中的所有mp3文件。 这不是任何forms的“ 普遍解决 – 一切都在工作,每一个怪异的案例 ”,但它应该有效。
说明:
ls -AQp
列出“几乎所有”文件,引用文件名并将斜杠附加到目录名称。 如果要排除符号链接,请将-p
替换为--file-type
。 引用文件名中的空格。
grep "\.mp3\"$"
仅选择以”.mp3“结尾的文件(加双引号)。
xargs
将整个批次重定向到子shell返回后的程序。
子shell:
xdg-mime query default audio/mpeg
为mime为audio/mpeg
文件提供默认应用程序的名称,格式为“app.desktop”。 您可以使用xdg-mime query filetype /path/to/file
检查环境中任何文件的mimetype。 我得到了mp3文件的“audio / mpeg”。
grep -oP '.+(?=\.desktop)'
从“app.desktop”获取“app”。
如果您要在一个不会发生太大变化的系统中经常使用它,您可能希望将其缩短为:
ls -AQp | grep "\.mp3\"$" | xargs default_app
将default_app
替换为随文件打开的实际程序。 你可以用这个来弄清楚它的名字:
xdg-mime query default audio/mpeg | grep -oP '.+(?=\.desktop)'
xdg-open
不会解决这个问题,因为它只接受一个设计参数。 如果使用xargs -n1
,那么你可能已经开始了,因为所讨论的应用程序可能会打开一个新实例中的每个文件,这可能会以多种方式变得丑陋。
我写了这个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)
您可以使用这些命令
cd /path/to/source_folder find . -type f -name *.mp3 -exec vlc {} \+
仅当您的音乐播放器支持多个文件作为命令行参数时。 用您选择的音乐播放器替换vlc
。
这在我的测试中适用于RhythmBox和VLC。
如果要在VLC中打开文件,请将此命令用于mp3文件。
vlc /directory/*.mp3
注意:使用cvlc
来使用没有接口的VLC。