একটি নির্দিষ্ট স্ট্রিং না থাকা ফাইলের নামগুলি সন্ধান করুন


19

আমি এর বিপরীতটি কার্যকর করতে চাই:

find . -name "*2013*"

বর্তমান ডিরেক্টরিতে থাকা সমস্ত ফাইল সন্ধান করুন যা তাদের নামে "2013" স্ট্রিং ধারণ করে না। আমি এটা কিভাবে করবো?

উত্তর:


28

কেবল:

find . ! -name '*2013*'

একটি যোগ করুন ! -type dএছাড়াও ধরনের ফাইল বাদ দেওয়ার ডিরেক্টরি (যেমন .নিজেই), অথবা -type fশুধুমাত্র অন্তর্ভুক্ত করা নিয়মিত ফাইল, ফাইল অন্য সব ধরনের ব্যতীত (ডিরেক্টরি, fifos, symlinks, ডিভাইস, সকেট ...)।

*0 বা ততোধিক অক্ষরের ক্রম মেলে তবে সাবধান হন । সুতরাং এটি ফাইলের নামগুলির প্রতিবেদন করতে পারে যা 2013যদি এর 2013আগে থাকে বা এমন কোনও কিছু অনুসরণ করে যা বর্তমান লোকালে বৈধ অক্ষর হিসাবে পুরোপুরি ডিকোড করা যায় না contain

যদি আপনি এমন কোনও লোকালে থাকেন যেখানে অক্ষরগুলি আলাদা আলাদা এনকোডিংয়ে এনকোড করা ফাইলের জন্য একাধিক বাইটে (ইউটিএফ -8 এর মতো) এনকোড করা যায়। উদাহরণস্বরূপ, কোনও ইউটিএফ -8 লোকালে , এটি কোনও Stéphane2013ফাইলের প্রতিবেদন করবে যদি éসেটি iso8859-15 অক্ষর সেট (0xe9 বাইট হিসাবে) এ এনকোড করা থাকে।

ফাইলের নামগুলি লোকেলের চরিত্রের সেটটিতে এনকোড করা আছে তা নিশ্চিত করা সেরা, তবে আপনি যদি এটির গ্যারান্টি দিতে না পারেন, তবে findসি-লকেলে প্রায় কাজ চলছে :

LC_ALL=C find . ! -name '*2013*'

4

Ksh ফাইলের নাম ধরণগুলি যথেষ্ট:

# files with 2013
ls -d -- *2013*

# files without 2013
ls -d -- !(*2013*)

উল্লেখ

যদি আপনার শেলটি বাশ হয়, আপনি shopt -s extglobএই প্যাটার্নটি ব্যবহার করার আগে আপনাকে চালনা করতে হবে (আপনি এটি নিজের মধ্যে রাখতে পারেন .bashrc)। যদি আপনার শেলটি zsh হয় তবে আপনাকে চালানো দরকার setopt ksh_glob(আপনি এটি নিজের মধ্যে রাখতে পারেন .zshrc)। Zsh এছাড়াও অফার করে ls -d -- ^*2013*, যার প্রাথমিক প্রয়োজন setopt extended_glob

এই ফাইলের নামগুলির সাথে আপনি কী করছেন তার উপর নির্ভর করে lsব্যবহার করার জন্য সঠিক কমান্ড নাও থাকতে পারে। তাদের একটি অ্যারেতে সঞ্চয় করতে store

filenames=( !(*2013*) )
for f in "${filenames[@]}"; do ...; done

4
এটি উপ-ডিরেক্টরিতে পুনরাবৃত্তি করে না এবং ডট ফাইলগুলি এড়িয়ে যাবে যদিও (এবং lsপ্যাটার্নটি কোনও ফাইলের সাথে মেলে না তবে একটি ত্রুটি বার্তা ফিরে আসবে)। এছাড়াও kshতালিকাটি বাছাই করবে তা নোট করুন ।
স্টাফেন চেজেলাস

-1

এখানে "2013" এখানে একটি নির্দিষ্ট স্ট্রিং না থাকা বর্তমান ডিরেক্টরিতে সমস্ত ফাইল সন্ধান করুন:

find . ! -name "*2013*" -type f

2
এটি 3 বছর আগে থেকে unix.stackexchange.com/a/102614/117549 হিসাবে মূলত একই জিনিস , আপনি "-f" যুক্ত করেছেন, যা এটি আরও খারাপ উত্তর করে।
জেফ শ্যাচলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.