Ls এবং গ্রেপ সহ নির্দিষ্ট এক্সটেনশন সহ ফাইলগুলি তালিকাভুক্ত করুন


153

আমি কেবল বর্তমান ডিয়ার থেকে কেবল ফাইলগুলিই পেতে চাই এবং কেবলমাত্র এমপি 4। এমপি 3। এক্সপ্রেস ফাইলগুলি অন্য কিছু না। সুতরাং আমি ভেবেছিলাম আমি কেবল এটি করতে পারি:

ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$

তবে না, প্রথম গ্রেপটি কেবল এমপি 4 এর ফলাফল হিসাবে অন্য 2 গ্রেপ ব্যবহার করা হবে না won't

কোন ধারনা? পিএস, ধীর চিতাবাঘে এই স্ক্রিপ্টটি চালাচ্ছেন।


1
এটি সত্যই ভুল পদ্ধতির - গ্রেপ ব্যবহারের পরিবর্তে, ব্যবহার করুন shopt -s nullglobএবং তারপরে কেবল উল্লেখ করুন *.exe *.mp3 *.mp4Mywiki.wooledge.org/ParsingLs
চার্লস ডাফি

1
"আস্তে চিতাবাঘ" টাইপো ছিল কিনা তা আমি বুঝতে পারি না ...
ওউফুনহাপ্পি

1
@ ওয়াওফুনহাফি হাহাহাহা, স্পষ্টতই একটি টাইপো ছিল, আমি স্মরণ করছি স্মরণ করছিলাম স্নো চিতাবাঘটি বেশ দ্রুত ছিল।
পুদিনা

উত্তর:


336

কেন না:

ls *.{mp3,exe,mp4}

আমি এটি কোথায় শিখেছি তা নিশ্চিত নই - তবে আমি এটি ব্যবহার করে আসছি।


1
এটি আমার পক্ষে কাজ করছে না কারণ আমি যে এক্সটেনশনটি ব্যবহার করছি তা কোনও ডিরেক্টরিতে রয়েছে, সুতরাং ls ডিরেক্টরিটির বিষয়বস্তু তালিকাভুক্ত করছে।
রিচার্ড ভেনিয়েবল

1
@ রিচার্ডভেনিয়েবল-ডিরেক্টরিগুলি পুনরাবৃত্তি হওয়া রোধ করতে -d সুইচ যুক্ত করুন।
কার্লোস ইউজিনিও থম্পসন পিনজান

11
আমি এই সমাধানটি পছন্দ করি তবে আপনি যদি কোনও ফাইল টাইপ মিস করেন তবে এটি ব্যর্থ হবে বলে মনে হয়। উদাহরণস্বরূপ, আপনার কাছে এমপি 3 আছে তবে কোনও
ছাড়

2
আমি এড়ানোর জন্য স্ট্যাডারকে / dev / নালটিতে পুনঃনির্দেশিত করেছি ls: *.exe: No such file or directoryযেমন:ls *.{zip,tar.gz,tar} 2>/dev/null
আইজাক

1
আমি যখন ls foo *। {Tar.gz, zip run চালান তখন এটি সরাসরি শেলটিতে কাজ করে তবে শেল স্ক্রিপ্টের মধ্যে সর্বশেষ = $ (ls -I ' .done' -tr $ k pkgprefix} । {টার। gz, zip} | লেজ -1) আমি একটি ত্রুটি বার্তা পেয়েছি: ls: 'bamtools *। {tar.gz, zip}' অ্যাক্সেস করতে পারে না: এরকম কোনও ফাইল বা ডিরেক্টরি নেই, যে কোনও স্মার্ট ছেলে উত্তরটি পরিমার্জন করতে পারে না।
কেমিন চাউ

41

এর সাথে নিয়মিত এক্সপ্রেশন ব্যবহার করুন find:

find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\n'

আপনি যদি ফাইলের নামগুলি পাইপ করছেন:

find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\0' | xargs -0 dosomething

এটি ফাঁকা বা নতুনলাইনযুক্ত ফাইলের নামগুলি সুরক্ষিত করে।

ওএস এক্স findকেবলমাত্র বিকল্পকে সমর্থন করে যখন -E(বর্ধিত) বিকল্পটি ব্যবহৃত হয়।

find -E . -regex '.*\.(mp3|mp4|exe)'

2
ম্যাক ওএস এক্সে:find . -iregex '.*\(mp3\|mp4\|exe\)'
অ্যান্ডিলাব

3
অ্যান্ডি, এটি ম্যাক ওএসে আমার পক্ষে কাজ করে নি। তবে এটি করেছে: সন্ধান করুন -ই। -রেজেক্স '। * (এমপি 3 | এমপি 4 | এক্সি)'
জোসেফ জনসন

এই সমাধান মত ফাইল লোড করা হবে mysupermp3.jpgজোড়ার জন্য বিবেচনা $এবং Regex শেষে \\.এক্সটেনশন আগে
Panthro

1
@ পানথ্রো: আসলে, তা হবে না। অন্তর্ভুক্ত নোঙ্গরগুলি ব্যবহার করুন বলে মনে হয়। বিন্দুটি একটি ভাল ধারণা (কেবলমাত্র একটি ব্যাকস্ল্যাশ প্রয়োজন)।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

39

egrep - বর্ধিত গ্রেপ - এখানে সহায়তা করবে

ls | egrep '\.mp4$|\.mp3$|\.exe$'

কাজ করা উচিত।


এটাই! ধন্যবাদ ঠিক বুঝতে পেরেছিলাম আমার এটির সংবেদনশীল হওয়া উচিত, তাই আমি ব্যবহার করছি: এলএস | egrep -i 'mp .mp4 $ | \ .mp3 $ | \ .exe else অন্য যে কোনও ব্যক্তিকে সেই একদিনের জন্য সহায়তা দরকার $ আমি আমার উত্তরটি এখানে পেতে গতিতে সর্বদা অবাক হয়েছি।
পুদিনা

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

4
@ ক্যাম: lsএক টার্মিনালে (বা -Cবিকল্প সহ) বহু-কলাম আউটপুট উত্পাদন করে। lsএকটি পাইপে (বা সহ -1) এর একক কলাম আউটপুট থাকে। (এর lsসাথে আউটপুট তুলনা করুন ls | cat)।
ভিড়

শেষে একটি অনুপস্থিত apost এটি ছাড়াও এটি কাজ করে বলে মনে হচ্ছে।
Björn

12

সবচেয়ে সহজ উপায় হ'ল ls ব্যবহার করা

ls *.mp4 *.mp3 *.exe

2
ধন্যবাদ, তবে আমি ইতিমধ্যে এটি চেষ্টা করেছি এবং ফাইল না থাকলে আপনি যে ত্রুটিগুলি পেয়েছেন তা আমি পছন্দ করি না। আপনি এটি স্থির করে নিতে পেরেছিলেন: ls * .mp4 * .mp3 * .exe 2> / dev / null কেবলমাত্র এখনই এটি সম্পর্কে আপনি চিন্তা করেছেন: পি
পুদিনা

1
আমি অবাক হই যে lsএক ধরণের নীরব বিকল্প নেই।
মিটমারো

2
ব্যাশে, আপনি "সেট-ন নলগ্লোব" করতে পারেন, এবং আপনি ত্রুটিগুলি পাবেন না।
ক্যামহ

2
আমার ভুল - এটি "শপট-নাল্লব্লাব" হওয়া উচিত সেট-কমান্ড নয়
ক্যাম্প

1
অথবা কেবল "প্রতিধ্বনি" ব্যবহার করুন: প্রতিধ্বনি *। এমপি 4 *। এমপি 3 *। এক্সি
অ্যাড্রিয়ান প্রানক

9

শুধু ক্ষেত্রে: আপনি ব্যবহার করবেন না কেন find?

find -iname '*.mp3' -o -iname '*.exe' -o -iname '*.mp4'

আমি এটির পরিবর্তে এটি খুঁজে পেয়েছি - find . -name '*.mkv' -o -name '*.flv'(প্রয়োজনীয় হিসাবে অনেকগুলি -o ধারা যুক্ত করা)। .ডিরেক্টরিটি নির্দেশ করতে এবং পতাকাটি আমার কাছে দরকার ছিল -nameনা -iname- আমি ম্যাকোএস 10.13 এ আছি।
ক্রিস

6

গ্রেপের দরকার নেই। শেল ওয়াইল্ডকার্ডস কৌশলটি করবে।

ls *.mp4 *.mp3 *.exe

দৌড়ালে তো

shopt -s nullglob

তারপরে অনবদ্য গ্লোবগুলি পুরোপুরি মুছে ফেলা হবে এবং কমান্ড লাইনে অপরিবর্তিত রেখে দেওয়া হবে না।

আপনি যদি কেস-সংবেদনশীল গ্লোববিং চান (তাই *। এমপি 3 foo.MP3 এর সাথে মিলবে):

shopt -s nocaseglob

গুড টাইম ট্রাইবকে যেমন দিয়েছিলাম তেমন মন্তব্য।
পুদিনা

1
আমি -Rসাব-ডিরেক্টরিতে ম্যাচের ফাইলগুলি তালিকার বিকল্পের সাথে এটি ব্যবহার করার চেষ্টা করছি তবে বিকল্পটির কোনও প্রভাব আছে বলে মনে হচ্ছে না এবং আমি এখনও কেবলমাত্র বর্তমান ডিরেক্টরিটির ফলাফল পেয়েছি।
ক্রিস

3

আপনি যদি এখনও কোনও বিকল্প সমাধান খুঁজছেন:

ls | grep -i -e '\\.tcl$' -e '\\.exe$' -e '\\.mp4$'

প্রয়োজনে আরও বেশি পতাকা যোগ করতে নির্দ্বিধায়।


3

ওএসএক্স ব্যবহারকারীদের জন্য :

আপনি ব্যবহার করেন তাহলে ls *.{mp3,exe,mp4}, এটি একটি ত্রুটির নিক্ষেপ করা হবে যদি সেই এক্সটেনশন এক কোন ফলাফল আছে।

ls *.(mp3|exe|mp4)এক্সটেনশনের একটিতে 0 ফলাফল থাকলেও ব্যবহার করে those এক্সটেনশনের সাথে মিলে সমস্ত ফাইল ফিরে আসবে ।


5
আমি আপনার উদাহরণ ব্যবহার করে একটি সিনট্যাক্স ত্রুটি পেয়েছি ??? 'বাশ: অপ্রত্যাশিত টোকেনের নিকটে সিনট্যাক্স ত্রুটি' ('
নাগর্ডন

2
আমি আপনি কি বলতে চান ls *.@(mp3|exe|mp4)shopt -s extglobএটি কাজ করার জন্য আপনার প্রয়োজন । যাইহোক, lsখুব অকেজো, আপনি ঠিক করতে পারেন printf '%s\n' *.@(mp3|exe|mp4)
gniourf_gniourf

1
আমি ম্যাকোজে 10.13
ক্রিস

1
ls | grep "\.mp4$
\.mp3$
\.exe$"

ধন্যবাদ, তবে বেশ কয়েকটি লাইন ব্যবহার করে কিছুটা অসুবিধে হচ্ছে।
পুদিনা

এটি + mdfindসেরা / দ্রুত অনুসন্ধানগুলি ফলন করে! mdfind -name querystring | grep "\.h$" ফাইল শিরোনামে কোয়েস্ট্রিস্টিং সহ সমস্ত শিরোনাম সন্ধান করে। pronto।
অ্যালেক্স গ্রে

1

ls -R | findstr ".mp3"

ls -R => উপ-ডিরেক্টরিগুলি পুনরাবৃত্তির সাথে তালিকাবদ্ধ করে


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