Đây là một lót:
ls -AQp | grep "\.mp3\"$" | xargs `xdg-mime query default audio/mpeg | grep -oP '.+(?=\.desktop)'`
Khi tôi đã cài đặt VLC (và như một mặc định cho mp3), điều này sẽ mở tất cả các tệp mp3 trong một thư mục có VLC cho tôi. Đây không phải là bất kỳ loại " phổ quát giải quyết-tất cả và công việc trong mọi trường hợp kỳ dị ", nhưng nó sẽ hoạt động.
Giải trình:
ls -AQp
liệt kê các tệp "gần như tất cả", trích dẫn tên tệp và thêm dấu gạch chéo vào tên của các thư mục. Thay thế -p
bằng --file-type
nếu bạn muốn loại trừ symlink là tốt. Trích dẫn trong trường hợp không gian trong tên tập tin.
grep "\.mp3\"$"
chỉ chọn các tệp kết thúc bằng ".mp3" (cộng với trích dẫn kép).
xargs
chuyển hướng toàn bộ lô để lập trình theo sau trả về subshell.
subshell:
xdg-mime query default audio/mpeg
cung cấp cho ứng dụng mặc định tên 's ở định dạng 'app.desktop' cho các tập tin có kịch câm là audio/mpeg
. Bạn có thể kiểm tra mimetype cho bất kỳ tệp nào trong môi trường của bạn với xdg-mime query filetype /path/to/file
. Tôi có "audio / mpeg" cho tệp mp3.
grep -oP '.+(?=\.desktop)'
nhận được "ứng dụng" từ "app.desktop".
Nếu bạn sẽ sử dụng nó rất thường xuyên trong một hệ thống sẽ không thay đổi nhiều, bạn có thể muốn rút ngắn nó về điều này:
ls -AQp | grep "\.mp3\"$" | xargs default_app
Nơi bạn thay thế default_app
bằng chương trình thực tế mở bằng các tệp. Bạn có thể tìm ra tên của nó với điều này:
xdg-mime query default audio/mpeg | grep -oP '.+(?=\.desktop)'
xdg-open
sẽ không làm việc với vấn đề này, bởi vì nó chỉ chấp nhận một đối số theo thiết kế. Nếu sử dụng
xargs -n1
, bạn chắc chắn sẽ gặp rắc rối với ứng dụng kết quả được đề cập có thể mở mọi tệp trong một trường hợp mới, có thể trở nên xấu xí theo nhiều cách.
xdg-open
nên thực sự có thể làm điều này theo mặc định ... chỉ cần chuyển danh sách đối số cho chương trình. Thôi nào mọi người freedesktop.org! :-)