Ubuntu: how to open multiple files with the default program from terminal?



Question:

I tried to open all my .mp3 files from a folder using xdg-open but I found out it opens just one! So I searched a little but there was not such a question! I found "evince" but apparently it open text files and gnome-open also opens one file.

I want to open all files of the same format in a folder from the terminal. I'm new to Ubuntu so please explain a little more.


Solution:1

Indeed. You could use shell to get around this, like this:

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

Or, if you want it more robust, try

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


Solution:2

You can try:

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

ls *.mp3 wil list all mp3 files from the current directory, each one on its own line, and the output is piped to an while loop witch read the content of each line and it will open that content (which is the name of a mp3 file in this case) in its default application.


Solution:3

I wrote a small script /usr/local/bin/o, although you could just call it /usr/local/bin/xdg-open and replace the default command if you wanted (assuming your $PATH gives it priority). Also, if it is given no argument, this script will open the current directory instead.

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

If you don't want to open the current directory with no argument, this retains the default behaviour, i.e. shows usage.

#!/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. this is agnostic about the default program's ability to parse multiple arguments, but instead will call each command once for each argument. I don't think there's an elegant way around this, since users may want to xdg-open different kinds of files, and some commands will not take multiple arguments anyway.


Solution:4

Here is a one-liner:

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

As I have VLC installed (and as a default for mp3s), this opens all mp3-files in a directory with VLC for me. This is not any sort of "universal-solve-it-all-and-work-in-every-freaking-case", but it should work.

Explanation:

ls -AQp lists "almost all" files, quoting filenames and appending slash to names of directories. Replace -p with --file-type if you wish to exclude symlinks as well. Quoting in case of spaces in filenames.

grep "\.mp3\"$" selects only files that ends with ".mp3" (plus double-quote).

xargs redirects the whole lot to program that following subshell returns.

subshell:

xdg-mime query default audio/mpeg gives default app's name in format "app.desktop" for files whose mime is audio/mpeg. You can check mimetype for any file in your environment with xdg-mime query filetype /path/to/file. I got "audio/mpeg" for mp3-file.

grep -oP '.+(?=\.desktop)' gets the "app" from "app.desktop".

If you're going to use it very frequently in a system that's not going to change much, you might want to shorten it to this:

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

Where you replace default_app with the actual program that opens with the files. You can figure out its name with this:

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


xdg-open wont work with this problem, because it accepts only one argument by design. If using xargs -n1, you're propably gona hit the wall with that the resulting app in question might open every file in a new instance, which might get ugly in more than one way.


Solution:5

I wrote this bash script to cover all the usage cases I could think of:

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

Features:

  • Writes error output to ~/.xsession-errors rather than polluting the terminal or throwing it away
  • Defaults to opening a maximum of 10 files (to not overload screen / processor)
  • Can set a new maximum with max=20 open $(ls -Q)
  • Allow opening all files, eg all=1 open $(ls -Q)


Solution:6

You can use these commands

cd /path/to/source_folder    find . -type f -name *.mp3 -exec vlc {} \+  

only if your music player supports multiple files as command line arguments. Replace vlc with your music player of choice.

This works with RhythmBox and VLC in my testing.


Solution:7

Use this command for mp3 files if you want to open files in VLC.

vlc /directory/*.mp3  

Note: Use cvlc to use VLC without interface.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »