ব্যাশ ব্যবহার করে আমি কীভাবে একটি আলাদা ডিরেক্টরিতে নির্দিষ্ট ফাইলগুলি বেছে নিতে পারি?


13

আমি ডিরেক্টরিতে নির্দিষ্ট ফাইলগুলিতে (বা মুছুন, বা অন্য কোনও ক্রিয়াকলাপ) এর তালিকা তৈরি করতে চাই:

$ ls /opt/somedir/
aa  bb  cc  aa.txt  bb.txt  cc.txt
$ ls /opt/somedir/(aa|bb|cc)  ## pseudo-bash :p
aa  bb  cc

আমি কীভাবে এটি অর্জন করতে পারি (ডিরেক্টরিটিতে প্রথমে সিডি-ইনিং ছাড়াই)?

উত্তর:



3

বাশের অধীনে, চালান shopt -s extglob(বা এটি আপনার রাখুন ~/.bashrc), এবং আপনি অতিরিক্ত নিদর্শনগুলি ব্যবহার করতে পারেন যা কোনও অস্বাভাবিক বাক্য গঠন (কেএসএস থেকে উত্তরাধিকারসূত্রে) দিয়ে নিয়মিত অভিব্যক্তি সরবরাহ করে। আপনিও অবশ্যই পর zsh এছাড়াও ksh মধ্যে এইসব নিদর্শন ব্যবহার করতে পারেন, এবং setopt ksh_glob

$ shopt -s extglob
$ ls /opt/somedir/@(aa|bb|cc|doesnotexist)
/opt/somedir/aa   /opt/somedir/bb  /opt/somedir/cc

Zsh এ, আপনি সরাসরি (foo|bar)একটি প্যাটার্ন হিসাবে ব্যবহার করতে পারেন ।

% ls /opt/somedir/(aa|bb|cc|doesnotexist)
/opt/somedir/aa   /opt/somedir/bb  /opt/somedir/cc

লক্ষ্য করুন যে কমান্ডটি পুরো পথ সহ কল ​​করা হয়েছে। যদি আপনি একটি সংক্ষিপ্ত পথ দিয়ে কমান্ডটি কল করতে চান, আপনাকে কোনওরকম ডিরেক্টরি পরিবর্তন করতে হবে এবং (cd /opt/somedir && somecommand aa bb cc)এটি এখন পর্যন্ত সবচেয়ে সহজ উপায়।


আপনি যদি ঘনিষ্ঠভাবে তাকান, আপনি দেখতে পাবেন যে আমি আমার প্রশ্নের প্রথম "ডিরেক্টরিতে সিডি-
ইনগিং

1

আপনি এটি ব্যবহার করে ফিল্টার করতে পারেন egrep:

ls | egrep '(aa|bb|cc)'

সমস্ত পাঠ্য ফাইল সন্ধান করতে:

ls | egrep '(aa|bb|cc).txt'

1
বিন্দু প্রতিটি চরিত্রের সাথে মেলে, এবং এই পদ্ধতির ফলে এই ফাইলগুলিতে আরও কাজ করা কঠিন হয়ে পড়ে
enzotib

1
আমি অনুভূতি পেয়েছি যে ls কেবল একটি উদাহরণ কমান্ড ছিল।
র্যান্ডম 832

হ্যাঁ, আপনি ঠিক বলেছেন, আমি নির্দিষ্ট করে দিয়েছি যে আমি কোনও অপারেশন করতে চাই: ফাইল তালিকাভুক্ত করা একটি উদাহরণ মাত্র।
neu242

ভাল মন্তব্য প্রিয় বন্ধুরা, ধন্যবাদ। শুভ কামনা neu242: ডি
ওশান

1

: প্রথম, আমি তোমাকে সরাসরি কখনো পার্স ম , কি কখনো । আপনি যা চান তা করতে সঠিক, এবং ক্যানোনিকাল পথ সঙ্গে হয় খোঁজ

উদাহরণ স্বরূপ:

find /opt/somedir -regex '.*[aa|bb|cc].*' -exec mv '{}' ~/backup \;

আমি সাধারণত এটি সহজ হিসাবে -nameপরিবর্তে ব্যবহার করি -regex। তবে একটি রেজেক্স আপনার ব্যবহারের ক্ষেত্রে ফিট করে। আপনি যে ফাইলটি সরানো / মুছে ফেলতে চান তা প্রকৃতপক্ষে তা নিশ্চিত করার জন্য আপনার প্রথম বার না করে কমান্ডটি চালানো উচিত -exec


আমি কখনই বলিনি যে আমি পার্স করব, এবং রাশ এর আরও ভাল উত্তর পেয়েছিল। চেষ্টা করার জন্য ধন্যবাদ, যদিও :)
neu242
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.