উত্তর:
ধরে নেওয়া যাক আপনি GNU ব্যবহার করছেন find
(যা আপনি সম্ভবত, যেহেতু POSIX এ-iregex
GNU এক্সটেনশন ) এবং ইমাক্স নিয়মিত এক্সপ্রেশনগুলিতে ডিফল্ট, যা সনাক্ত করে না । বিকল্পটি ব্যবহার করে আপনাকে বিভিন্ন ধরণের নিয়মিত অভিব্যক্তি নির্দিষ্ট করতে হবে ; এছাড়াও, আপনার নিয়মিত প্রকাশটি এই সত্যটির সাথে সামঞ্জস্য করতে হবে যে সম্পূর্ণ পথটির সাথে অভিব্যক্তিটি মেলে:find
-regex
-iregex
{3,}
-regextype
find ~ -regextype posix-extended -iregex '.*/[^/]{3,}.pdf'
আপনারও পালানো উচিত .
যাতে এটি "মেলে।" বরং কোনও চরিত্রের চেয়ে:
find ~ -regextype posix-extended -iregex '.*/[^/]{3,}\.pdf'
আমরা কেবল তিনটি অ - "/" অক্ষর সম্পর্কে যত্নশীল হওয়ায় নিয়মিত অভিব্যক্তিটি সরল করা যায়:
find ~ -regextype posix-extended -iregex '.*[^/]{3}\.pdf'
সম্পূর্ণতার জন্য, ফ্রিবিএসডি বা নেটবিএসডি find
(অন্য একটি বাস্তবায়ন যা সমর্থন করে -iregex
, যদিও .+
এটি ছাড়া সেখানে কাজ করবে না -E
) আপনার লিখতে হবে:
find ~ -iregex '.*[^/]\{3\}\.pdf'
বা:
find -E ~ -iregex '.*[^/]{3}\.pdf'
ব্যতীত -E
, এটি মৌলিক নিয়মিত অভিব্যক্তি (এর মতো grep
) এবং -E
বর্ধিত নিয়মিত প্রকাশের সাথে (এর মতো grep -E
)।
অস্ট-ওপেন সহ find
:
find ~ -iregex '.*[^/]{3}\.pdf'
(এটি বাক্সের বাইরে রেগেক্সপস প্রসারিত)।
মানক ওয়াইল্ডকার্ড সহ এটি এখানে সহজ:
find ~ -name '*???.[pP][dD][fF]'
বা কিছু find
বাস্তবায়ন সহ (যারা সমর্থন করে -regex
তারাও সমর্থন করে -iname
):
find ~ -iname '*???.pdf'
পরিবর্তে নির্বিচারে সংখ্যক অক্ষরের জন্য 3
, আপনি -iregex
যেখানে উপলব্ধ সেখানে ফিরে যেতে পছন্দ করতে পারেন ( @ স্টিফেন কিটের উত্তর দেখুন ) বা আপনি ব্যবহার করতে পারেন zsh
বা ksh93
গ্লোবস:
zsh
:
set -o extendedglob # best in ~/.zshrc
printf '%s\n' ~/**/?(#c3,).(#i)pdf(D)
(এর (D)
সাথে লুকানো ফাইলগুলিতে লুকানো ফাইল এবং ফাইলগুলি বিবেচনা করুন find
)
(#cx,y)
হয় zsh
regexp এর ওয়াইল্ডকার্ড সমতুল্য{x,y}
(#i)
সংবেদনশীল ক্ষেত্রে?
যে কোনও একক চরিত্রের জন্য স্ট্যান্ডার্ড ওয়াইল্ডকার্ড (যেমন রিজেপেক্স .
)**/
: উপ-ডিরেক্টরিগুলির যে কোনও স্তরের (0 সহ)ksh93
:
FIGNORE='@(.|..)' # to consider hidden files
set -o globstar
printf '%s\n' **/{3,}(?).~(i:pdf)
@(x|y)
: এক্সজেডের সমান প্রসারিত কেএসএস ওয়াইল্ডকার্ড অপারেটর (x|y)
।FIGNORE
: বিশেষ পরিবর্তনশীল যা গ্লোব দ্বারা উপেক্ষা করা ফাইলগুলি নিয়ন্ত্রণ করে controls সেট করা থাকলে, লুকানো ফাইলগুলিতে স্বাভাবিক উপেক্ষা করা হয় না, তবে আমরা যেখানে উপস্থিত সেখানে ডিরেক্টরি .
এবং ..
ডিরেক্টরি এন্ট্রি উপেক্ষা করতে চাই ।{x,y}(z)
এটি ksh93
regexp এর সমতুল্য z{x,y}
।~(i:...)
: কেস-সংবেদনশীল মিল।গ্লোবগুলির এখানে কিছু অতিরিক্ত সুবিধা রয়েছে find
যাতে আপনি একটি সাজানো তালিকা পান (আপনি গ্লোব কোয়ালিফায়ারের zsh
সাথে বাছাই করতে অক্ষম করতে পারেন oN
, বা বিভিন্ন বাছাই করার মানদণ্ড ব্যবহার করতে পারেন) এবং যখন ফাইলের নামগুলিতে বাইটের ক্রম থাকে যা বৈধ অক্ষর তৈরি করে না (এর জন্য) উদাহরণ হিসেবে বলা যায়, একটি লোকেল হল UTF-8 অক্ষরসেট ব্যবহারে, find
পদ্ধতির একটি রিপোর্ট করতে ব্যর্থ হবে $'St\xE9phane Chazelas - CV.pdf
যে \xE9
হচ্ছে একটি অক্ষর regexp মেলে না তাই না .
বা ওয়াইল্ডকার্ড ?
বা *
গনুহ সঙ্গে find
)।
shopt -s dotglob globstar; printf '%s\n' ~/**/*???.[pP][dD][fF]
আপনি না জিজ্ঞাসা না। অবশ্যই, আমি পেডেন্টিক হচ্ছি, তবে আপনি তাদের নামের ফাইলগুলির.pdf
বিষয়ে জিজ্ঞাসা করলেন না । কোনও ফাইলের .pdf
ফাইলের অক্ষর রয়েছে বলেই এটি পিডিএফ ফাইল তৈরি করে না ।
আসলে, আসুন আমরা এটি সম্পর্কে সর্বাত্মক পেডেন্টিক থাকি: যদি কোনও ফাইলের নামের শেষ চারটি অক্ষর হয় .pdf
তবে তার নামটিতে সর্বদা তিনটি অক্ষরের বেশি থাকবে ।
সুতরাং এটি ভুল উপায়ে করে আপনি বলতে পারেন:
$ find . -type f -name "*???.pdf"
./Documents/McLaren 720s Coupe:Order Summary.pdf
./Documents/Setup_MagicISO.exe.pdf
দ্বিতীয়টি দেখুন? এটি আসলে একটি নির্বাহযোগ্য। (আমি জানি, আমি নামটি পরিবর্তন করেছি)) এবং আমি এমন একটি পিডিএফও হারিয়ে যাচ্ছি যা আমি দস্তাবেজ ডিরেক্টরিতে শপথ করেছিলাম ...
$ ls Documents
McLaren 720s Coupe:Order Summary.pdf
Pioneer Premier DEH-P490IB CD Install Manual.PDF
Setup_MagicISO.exe.pdf
সুতরাং ব্যবহার করে -iname
আমরা এটির সন্ধান করতে পারি, তবে এটি এখনও পিডিএফ ফাইল নয় not
আমরা কি সত্যিই এই ক্ষেত্রে কাজ করতে চান ফাইলের পরীক্ষা হয় ম্যাজিক নম্বর ব্যবহার file
কমান্ড। একটি বিকল্প এমআইএমআই টাইপকে আউটপুট করে যা পার্স করা সহজ। find
ক্যোয়ারী তারপর একটি সহজ হয়ে -name "???*"
।
$ find . -type f -name "???*" -print0|xargs -0 file --mime
./.bash_history: text/plain; charset=us-ascii
./.bash_logout: text/plain; charset=us-ascii
./.bashrc: text/plain; charset=us-ascii
./.profile: text/plain; charset=us-ascii
./Documents/McLaren 720s Coupe:Order Summary.pdf: application/pdf; charset=binary
./Documents/Pioneer Premier DEH-P490IB CD Install Manual.PDF: application/pdf; charset=binary
./Documents/Setup_MagicISO.exe.pdf: application/x-dosexec; charset=binary
./Downloads/Setup_MagicISO.exe: application/x-dosexec; charset=binary
./Downloads/WindowsUpdate.diagcab: application/vnd.ms-cab-compressed; charset=binary
কোলন ডিলিমিটারটি ব্যবহার করুন এবং মাইমে টাইপের সন্ধান করুন application/pdf
, তারপরে সেই অংশটি শূন্য করে ফলাফল মুদ্রণ করুন। খেয়াল করুন, আমার একটি ফাইলের নামে একটি কোলন রয়েছে; সুতরাং আমি কেবল বিশ্রী জিজ্ঞাসা করতে পারি না ($2==":"){print $1}
।
$ find . -type f -name "???*" -print0|xargs -0 file --mime|awk -F: '($NF~"application/pdf"){OFS=":";$NF="";print}'|sed s/:$//
./Documents/McLaren 720s Coupe:Order Summary.pdf
./Documents/Pioneer Premier DEH-P490IB CD Install Manual.PDF
এখন অন্তর্ভুক্ত করা পিডিএফ ফাইল নামে কল্পী দ্বারা আপ শেষ করতে দাও a
এবং abc
:
$ mkdir Documents/other
$ cp -a Documents/McLaren\ 720s\ Coupe\:Order\ Summary.pdf Documents/other/a
$ cp -a Documents/Pioneer\ Premier\ DEH-P490IB\ CD\ Install\ Manual.PDF Documents/other/abc
$ find . -type f -name "???*" -print0|xargs -0 file --mime|awk -F: '($NF~"application/pdf"){OFS=":";$NF="";print}'|sed s/:$//
./Documents/McLaren 720s Coupe:Order Summary.pdf
./Documents/Pioneer Premier DEH-P490IB CD Install Manual.PDF
./Documents/other/abc
এখানেই শেষ. আমি আমি সম্ভবত ভয়ঙ্করভাবে গোঁড়া হচ্ছে জন্য dinged পাবেন, কিন্তু আমার কাজ খোঁজা NFS- র ভলিউম এবং দুর্বল নামক সব ধরনের ফাইল হাজার হাজার সঙ্গে, আমি আশা করি আরও অনেক বেশি মানুষের গোঁড়া হবে।
যুক্ত করতে সম্পাদিত: বাস্তব বিশ্বে, আমি updatedb
সেই সূচিটি পড়ার locate
পরিবর্তে অনুসন্ধানযোগ্য ফাইল সূচক তৈরি find
করতে এবং 'থ্রেড' এর parallel
পরিবর্তে ব্যবহার xargs
করতে চাই। যদিও এই প্রশ্নের ক্ষেত্র বাইরে কিছুটা। আমি এটিও সরাসরি মুখ দিয়ে লিখেছি। আমি এত যত্ন কেন? আমি মুভি এবং অডিও ফাইলগুলি খুঁজছি; বা নির্দিষ্ট ধরণের ফটোগ্রাফ; বা একটি প্রকল্প ডেটা ডিরেক্টরিতে বাইনারি এক্সিকিউটেবল।
.pdf
, তবে আপনার পেডেন্ট্রিটি প্রশংসিত হবে। তবে এটি তুলনামূলকভাবে অস্বাভাবিক পরিস্থিতি (আপনার কাজ সত্ত্বেও) এবং আমাদের বিশ্বাস করার কোনও কারণ নেই যে প্রশ্নকারীকে আসলে এর সাথে মোকাবিলা করতে হবে, তাই আমি মনে করি যে আপনি যে পয়েন্টটি তৈরি করছেন, বৈধ থাকাকালীন তা একধরণের বিভ্রান্তিকর - এবং আমি মনে করি আপনি যে বলিষ্ঠভাবে এটিকে উচ্চারণ করেছেন তা উত্তরটিকে "(সম্ভবত) দরকারী নয়" এর রাজ্যে ফেলে দেয়। (অবশ্যই আমার মতামত।)