টার্মিনাল থেকে ডিফল্ট প্রোগ্রাম সহ একাধিক ফাইল কীভাবে খুলবেন?


13

আমি আমার সমস্ত .mp3 ফাইল ব্যবহার করে একটি ফোল্ডার থেকে খোলার চেষ্টা করেছি xdg-open তবে আমি জানতে পেরেছি যে এটি কেবল একটিটি খোলে! তাই আমি কিছুটা তল্লাশি করেছিলাম কিন্তু এমন প্রশ্নই ওঠে নি! আমি "প্রমাণিত" পেয়েছি তবে স্পষ্টতই এটি টেক্সট ফাইলগুলি খোলায় এবং জিনোম-ওপেন একটি ফাইলও খুলবে।

আমি টার্মিনাল থেকে একটি ফোল্ডারে একই বিন্যাসের সমস্ত ফাইল খুলতে চাই। আমি উবুন্টুতে নতুন তাই দয়া করে আরও কিছু ব্যাখ্যা করুন।


1
xdg-openএটি ডিফল্টরূপে সত্যিই সক্ষম হতে হবে ... কেবলমাত্র যুক্তি তালিকাটি প্রোগ্রামে পাস করুন। আসুন ফ্রিডেস্কটপ.অর্গ লোকেরা! :-)
সিরো সান্তিলি 冠状 病毒 审查 六四 事件

উত্তর:


8

প্রকৃতপক্ষে. আপনি এটির মতো এটি পেতে শেল ব্যবহার করতে পারেন:

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

অথবা, আপনি যদি এটি আরও দৃust় চান তবে চেষ্টা করুন

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

প্রথমটি তাদের নামে সাদা স্থান সহ ফাইলগুলি নিয়ে কাজ করে না এবং দ্বিতীয়টি ( find: paths must precede expression: -) মোটেও কাজ করে না ।
স্পারহাক

1
আপনি যদি মনোযোগ সহকারে পড়েন তবে আমি লিখেছিলাম "যদি আপনি এটি আরও শক্তিশালী চান ...", সুতরাং প্রথমটি, সহজ সংস্করণটি স্পেসগুলির সাথে কাজ করে না, তবে এটি উদ্দেশ্য ছিল না। দ্বিতীয় সমাধানটি উবুন্টু দিয়ে কাজ করে; এফওয়াইআই, এর নতুন সংস্করণগুলি ডিফল্টরূপে পাথের নামটি সন্ধান করে।
অ্যাগোস্টন হরভাথ

আমি নিশ্চিত নই যে পথের অভাবই দ্বিতীয়টিতে সমস্যা (ত্রুটির বার্তা সত্ত্বেও)। আমি puttingোকানোর চেষ্টা .করেছি এবং একই ত্রুটি বার্তা পেয়েছি। অন্য ডিরেক্টরিতে, আমি xdg-open: unexpected argument './foo.mp3'সাথে বা ছাড়া পাই .
স্পারহাক

এছাড়াও, আমি মনে করি যে নামগুলিতে স্পেস থাকা এতটা অস্বাভাবিক পরিস্থিতি নয় যে এটি "সাধারণ" ক্ষেত্রেও উপেক্ষা করা উচিত।
স্পারহাক

আমি নিশ্চিতভাবে বলতে গেলে আপনার নির্দিষ্ট সেটআপ সম্পর্কে যথেষ্ট জানি না, তবে এক্সডিজি-ওপেন কাজ করে যা আমি একটি নতুন উবুন্টু ইনস্টল সম্পর্কে বর্ণনা করেছি। অনিশ্চিত হলে লোককে এক্সডিজি-ওপেন দেখুন।
আগস্টন হরভাথ

4

আপনি চেষ্টা করতে পারেন:

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

ls *.mp3উইল বর্তমান ডিরেক্টরি থেকে সমস্ত এমপি 3 ফাইলের তালিকা তৈরি করবে, প্রতিটি তার নিজস্ব লাইনে, এবং আউটপুটটি whileপ্রতিটি লাইনটির সামগ্রী পড়বে একটি লুপ ডাইনিতে পাইপ করা হবে এবং এটি সেই সামগ্রীটি খুলবে (যা এই ক্ষেত্রে একটি এমপি 3 ফাইলের নাম is ) এর ডিফল্ট প্রয়োগে।


@ কারেল আমি -rপতাকাটি যুক্ত করেছি। আমি মনে করি এটির নামে একটি `\` ফাইলগুলি সঠিকভাবে পার্স করা দরকার is
স্পারহক

2
umm ... এটি একই প্রোগ্রামের বেশ কয়েকটি দৃষ্টান্ত উন্মুক্ত করবে?
ব্রায়াম

@ কারেল হ্যাঁ ... আমার man readকোনও পতাকাও তালিকাভুক্ত নয়, খুব! আমি আমার পরীক্ষায় ত্রুটি পাই না, তবে এটি সম্ভবত কারণ আমি তৈরি করেছি aaaএবং করেছি aa\a। এই ক্ষেত্রে, xdg-openকেবল aaaদুটি বার খোলার চেষ্টা করুন , এবং না aa\a। (ঠিক আছে, আমি একটি বিট সংবর্ত হয়ে যাচ্ছে, কিন্তু আমি মনে করি কোড সব পরিস্থিতিতে জন্য কাজ করা উচিত। সম্ভবত findএকটি ভাল বিকল্প, সীমাবদ্ধতা এড়াতে lsএবং read।) এছাড়াও, কিভাবে এটা ঠিক ক্ষিতি প্রকাশ করতে পারি? এটি কি কেবলমাত্র আউটপুটকে বিশ্লেষণ করতে যাচ্ছে না ls?
স্পারহাক

@ কারেল man readসি ফাংশন রিডে (লোকটির বিভাগ 2) প্রকাশ করছেন। এটি readবাশ বিল্টিন কমান্ড, সুতরাং আপনার man bash4632 লাইনে কোথাও সন্ধান করা উচিত। @ স্পারহাক - সম্পাদনার জন্য ধন্যবাদ thanks
রাদু রেডানু

@ ব্রাইয়াম উমম ... এমপি 3 এর ক্ষেত্রে এটি হয় না এবং এটি ডিফল্ট অ্যাপ্লিকেশন থেকে সেটিংস সম্পর্কে নির্ভর করে। আচরণটি একইরকম যখন আপনি নটিলাস বা আপনার প্রিয় ফাইল পরিচালক থেকে একাধিক ফাইল খুলবেন।
রাদু রেডানু

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

এনবি এটি ডিফল্ট প্রোগ্রামের একাধিক যুক্তি পার্স করার ক্ষমতা সম্পর্কে অজ্ঞাত জ্ঞাত, তবে পরিবর্তে প্রতিটি যুক্তির জন্য প্রতিটি কমান্ডকে একবার কল করবে। আমি মনে করি না এর চারপাশে একটি মার্জিত উপায় আছে, যেহেতু ব্যবহারকারীরা 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- ত্রুটিগুলিতে লিখেছে
  • সর্বাধিক 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)'`

আমি যেমন ভিএলসি ইনস্টল করেছি (এবং এমপি 3 এর জন্য একটি ডিফল্ট হিসাবে), এটি আমার জন্য ভিএলসি সহ একটি ডিরেক্টরিতে সমস্ত এমপি 3-ফাইল খুলবে। এটি " সর্বজনীন-সমাধান-এটি-সর্ব-ও-কাজ-ইন-প্রতিটি-ফ্রিকিং-কেস " কোনও ধরণের নয় , তবে এটি কাজ করা উচিত

ব্যাখ্যা:

ls -AQp"প্রায় সমস্ত" ফাইল তালিকাভুক্ত করে, ফাইলের নাম উদ্ধৃত করে এবং ডিরেক্টরিগুলির নামগুলিতে স্ল্যাশ যুক্ত করে। প্রতিস্থাপন -pসঙ্গে --file-typeআপনি symlinks বাদ দেওয়ার পাশাপাশি কামনা করি। ফাইলের নামগুলিতে ফাঁকির ক্ষেত্রে উদ্ধৃতি দেওয়া হচ্ছে।

grep "\.mp3\"$" ".mp3" (প্লাস ডাবল-কোট) দিয়ে শেষ হওয়া ফাইলগুলি কেবল নির্বাচন করে।

xargs নিম্নলিখিত সাবশেলের রিটার্নগুলি পুরো প্রোগ্রামটিকে পুরোপুরি পুনর্নির্দেশ করে।

subshell:

xdg-mime query default audio/mpegযার মাইম ফাইলগুলির জন্য "অ্যাপ.ডেস্কটপ" ফর্ম্যাটে ডিফল্ট অ্যাপের নাম দেয় audio/mpeg। আপনি আপনার পরিবেশের যে কোনও ফাইলের জন্য মাইমটাইপ পরীক্ষা করতে পারেন xdg-mime query filetype /path/to/file। আমি এমপি 3-ফাইলের জন্য "অডিও / এমপিইগ" পেয়েছি।

grep -oP '.+(?=\.desktop)' "অ্যাপ.ডেস্কটপ" থেকে "অ্যাপ" পান "

আপনি যদি এমন সিস্টেমে খুব ঘন ঘন ব্যবহার করতে যাচ্ছেন যা খুব বেশি পরিবর্তন ঘটছে না, আপনি এটি এটিকে সংক্ষিপ্ত করতে চাইতে পারেন:

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

যেখানে আপনি default_appপ্রকৃত প্রোগ্রামটি প্রতিস্থাপন করবেন যা ফাইলগুলির সাথে খোলে। আপনি এটির সাথে এর নামটি বের করতে পারেন:

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


xdg-openএই সমস্যাটি নিয়ে কাজ করবে না, কারণ এটি ডিজাইনের মাধ্যমে কেবল একটি যুক্তিই গ্রহণ করে। যদি ব্যবহার করা হয় xargs -n1, আপনি সম্ভবত প্রাচীরের সাথে আঘাত হবেন যে প্রশ্নটির ফলে থাকা অ্যাপ্লিকেশনটি নতুন ফাইলগুলিতে প্রতিটি ফাইল খুলতে পারে, যা একাধিক উপায়ে কুৎসিত হতে পারে।


-1

আপনি এই কমান্ড ব্যবহার করতে পারেন

cd /path/to/source_folder

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

কেবলমাত্র যদি আপনার সঙ্গীত প্লেয়ার একাধিক ফাইলকে কমান্ড লাইন আর্গুমেন্ট হিসাবে সমর্থন করে। vlcআপনার পছন্দের সঙ্গীত প্লেয়ারের সাথে প্রতিস্থাপন করুন ।

এটি আমার পরীক্ষায় রিদমবক্স এবং ভিএলসির সাথে কাজ করে।


না find... -execপ্রতিটি ফাইল পৃথক কমান্ড চালায়? এবং এছাড়াও, যদি আপনার সঙ্গীত প্লেয়ার একাধিক ফাইলকে কমান্ড লাইন আর্গুমেন্ট হিসাবে সমর্থন করে, আপনি কেবল ব্যবহার করতে পারেন vlc *.mp3
স্পারহক

@ স্পারহাক \+শেষে নেই
এবি

@ এবা হ্যাঁ, ভাল কথা; আমি ভৃল ছিলাম. যাইহোক, আমার দ্বিতীয় বাক্য অনুসারে, findআপনি vlcযেভাবেই হার্ডকোড করতে চলেছেন তা ব্যবহার করা অর্থহীন বলে মনে হচ্ছে । (প্রশ্নটি ইঙ্গিত দেয় যে তারা সকলেই একটি ডিরেক্টরিতে রয়েছে))
স্পারাহাক

শুধু +যথেষ্ট, প্রয়োজন নেই \+
গ্রম্বেল

-1

আপনি যদি ভিএলসিতে ফাইল খুলতে চান তবে এমপি 3 ফাইলের জন্য এই কমান্ডটি ব্যবহার করুন।

vlc /directory/*.mp3

দ্রষ্টব্য: cvlcইন্টারফেস ছাড়াই ভিএলসি ব্যবহার করতে ব্যবহার করুন ।


3
প্রশ্নটি "ডিফল্ট প্রোগ্রাম" বলে তাই সরাসরি ভিএলসি ব্যবহার করা কিছুটা অর্থহীন।
মুড়ু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.