ফাইলের নাম দ্বারা দৈর্ঘ্য অনুসারে ফাইলগুলি সন্ধান করুন


10

আমি ফাইলের নামগুলির দৈর্ঘ্য অনুসারে সমস্ত ফাইল সন্ধান করতে চাই।

উদাহরণস্বরূপ, যদি আমি যেমন দৈর্ঘ্য 1 ফাইল, খুঁজে পেতে চান a.go, b.go

আমি রাখি:

grep '.\{1\}' file

কিন্তু এই কাজ করে না। ফাইলের নাম দৈর্ঘ্য দ্বারা ফাইলগুলি খুঁজতে আমি কোন আদেশ ব্যবহার করতে পারি?


a.goদৈর্ঘ্যের একটি ফাইল নাম 4 4. দৈর্ঘ্যের aএকটি ফাইলের নাম 1. এটি ইউনিক্স, ডস নয় যেখানে নাম এবং এক্সটেনশন পৃথক ছিল এবং একটি অন্তর্ভুক্ত .সর্বদা ফাইলের নাম ছিল part
পিটার কর্ডেস

উত্তর:


3

grepফাইলের বিষয়বস্তুগুলিতে নিদর্শনগুলির সন্ধান করে। আপনি যদি ফাইলগুলির নাম দেখতে চান তবে আপনি কেবল একটি শেল গ্লোব ব্যবহার করতে পারেন (যদি আপনি কেবল বর্তমান ডিরেক্টরিতে কেবল ফাইলের নাম বিবেচনা করতে চান):

echo ?.go

(যাইহোক, এটি শেল যা echoকমান্ড নয়, বিশ্বকে মূল্যায়ন করে not )

আপনি যদি বর্তমান ডিরেক্টরি থেকে শুরু করে ডিরেক্টরিগুলি পুনরাবৃত্তভাবে দেখতে চান তবে ব্যবহারের সরঞ্জামটি হ'ল find:

find . -name '?.go'

(নোট করুন যে শেলটিকে ডাকা হওয়ার আগে শেলটিকে গ্লোব হিসাবে মূল্যায়ন করা থেকে বিরত রাখতে আপনাকে প্যাটার্নটি উদ্ধৃত করতে হবে find।)


1
এটি '? .Go' প্যাটার্নের সাথে মেলে এমন ডিরেক্টরিগুলিও খুঁজে পেতে পারে।
slm

@ এসএলএম, ডিরেক্টরিগুলি অনেক ধরণের ফাইলের মধ্যে একটি, ওপিতে তিনি কোন ধরণের ফাইলের পরে ছিলেন তা নির্দিষ্ট করে নি।
স্টাফেন চেজেলাস

8

আপনি যদি কেবল ফাইলের নামগুলি সন্ধান করতে চান তবে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

find -exec basename '{}' ';' | egrep '^.{100,}$'

এটি চলবে find, ফাইল বা ডিরেক্টরি ব্যবহার করে নাম ব্যবহার করে টেনে আনবে basenameএবং তারপরে নূন্যতম 100 টি অক্ষরের কোনও ফাইলের নাম বা ডিরেক্টরিটির নাম সন্ধান করবে। আপনি যদি কোনও সঠিক দৈর্ঘ্যের একটি ফাইল নাম খুঁজতে চান তবে {100}পরিবর্তে ব্যবহার করুন {100,}

আপনি যদি পথ সহ ফাইলের নামগুলি সন্ধান করতে চান তবে এটি করুন:

find | egrep '/[^/]{100,}$'

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


3

প্রথমত, ফাইলগুলির বিষয়বস্তুgrep অনুসন্ধান করে, এটি ফাইলের নাম অনুসন্ধান করবে না। তার জন্য আপনি চান । এতে ফাইলের নাম দৈর্ঘ্য সেট করার বিকল্প নেই তবে আপনি যা চান তা পেতে আপনি এটির আউটপুট পার্স করতে পারেন। এখানে কয়েকটি উদাহরণ রয়েছে যা আমি নিম্নলিখিত ফাইলগুলি সহ একটি ডিরেক্টরিতে চালিত করি:find

$ tree
.
├── a
├── ab
├── abc
├── abcd
└── dir
    ├── a
    ├── ab
    ├── abc
    └── abcd

এই ডিরেক্টরিতে ফাইলগুলি অনুসন্ধান করা ফিরে আসে:

$ find . -type f | sort
./a
./ab
./abc
./abcd
./dir/a
./dir/ab
./dir/abc
./dir/abcd

সুতরাং, এক্স দৈর্ঘ্যের ফাইলগুলি সন্ধান করার জন্য, আমাদের পাথটি সরিয়ে ফেলতে হবে এবং শেষের পরে কেবল অক্ষরগুলিই মেলানো দরকার /:

 $ find . -type f | grep -P '/.{3}$'

sedকমান্ড ঠিক সরিয়ে ফেলা হবে ./-Pপতাকা পার্ল সামঞ্জস্যপূর্ণ রেগুলার এক্সপ্রেশন, যার জন্য প্রয়োজন হয় সক্রিয় {n}যা PCRE জিনিস এবং $মানে হলো "স্ট্রিংয়ের শেষ প্রান্ত মেলে"।

আপনি সহজভাবে এটি করতে পারেন:

find . -type f | grep -P '/...$'

ছোট সংখ্যার জন্য 15 ডট টাইপের দৈর্ঘ্যের ফাইলের সাথে মিল রাখতে টাইপ করা খুব দক্ষ নয়।

অবশেষে, আপনি যদি এক্সটেনশনটি উপেক্ষা করতে এবং কেবল ফাইলের নামের সাথে মিল করতে চান তবে এটি করুন (@ এসএমএলএম প্রস্তাবিত হিসাবে):

find . -type f | grep -P '/.{1}\.'

তবে এটি এর মতো ফাইলগুলিও খুঁজে পাবে a.bo.go। আপনার ফাইলের নামগুলিতে একাধিক থাকতে পারে তবে এটি আরও ভাল .:

find . -type f | grep -P '/.{1}\.[^.]+$'

দ্রষ্টব্য: উপরের সমাধানটি ধরে নিয়েছে যে আপনার তুলনামূলকভাবে বুদ্ধিমান ফাইলনাম রয়েছে যাতে নতুন লাইন বর্ণগুলি নেই। এর মধ্যে যদি কোনও সমস্যা হয় তবে আমাকে জানান এবং আমি আমার উত্তর আপডেট করব।


1

আপনি উল্লেখ করতে পারবেন না তবে ফাইলগুলি যদি কোনও কাঠামোর মধ্যে থাকে তবে আপনি findসাহায্যের সাহায্যে 1 দৈর্ঘ্যের দৈর্ঘ্যের ফাইলগুলি সনাক্ত করতে ব্যবহার করতে পারেন grep:

$ find . -type f  | grep -P '/.{1}\.'

উদাহরণ

$ find . -type f  | grep -P '/.{1}\.' | head -10
./util-linux-2.19/include/c.h
./88366/a.bash
./89186/a.bash
./89563/b.txt
./89563/a.txt
./89563/c.txt
./89563/d.txt
./91734/2.c
./91734/4.c
./91734/1.c

ম্যাকোস এক্স-এ, egrep ব্যবহার করুন এবং -P বিকল্পটি সরিয়ে ফেলুন
বার্ট কুমেল

@ বার্টকুমেল - আসলে আমি ব্যবহার করি ওএসএক্সেggrep : heistaphenwood.com/2013/09/install-gnu-grep-on-mac-osx.html । এছাড়াও বুঝতে পারেন যে এই কিউটিকে ওএসএক্স হিসাবে ট্যাগ করা হয়নি তাই এর ব্যবহারটি grepযথাযথ।
slm

1

আমি এই জাতীয় কিছু ব্যবহার করব।

find . -type f -name "?.go"

তাহলে দুটো রাখলে "?" তারপরে আপনি দুটি অক্ষর এবং এক্সটেনশন সহ ফাইলের নাম সন্ধান করছেন।


0

যখন আপনি ফাইন্ড কমান্ডে নিয়মিত এক্সপশন ব্যবহার করতে চান, আপনার ""যেমন ব্যবহার করা উচিত :

find /var/log -iname "*.err" 

ইওর কেস ব্যবহারের জন্য:

find yourpath -type f -a -name "?.go"

আপনার সত্যিকারের পথটি আপনারপথ দিয়ে প্রতিস্থাপন করা উচিত, এর -aঅর্থ And -type fহ'ল আপনি কেবল নিয়মিত ফাইল অনুসন্ধান করছেন।

? আপনার ক্যোয়ারির অর্থ একটি চরিত্র যেমন ডস হিসাবে যদি আপনি স্মরণ করিয়ে থাকেন।


-1

ls ?.* আপনাকে পছন্দসই ফলাফল দেওয়া উচিত।


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