তাদের নামে কমপক্ষে তিনটি অক্ষরযুক্ত সমস্ত পিডিএফ সন্ধান করুন


9

আমি পিডিএফ ফাইলগুলি খুঁজতে চাই যার নাম (এক্সটেনশন বাদে) তিনটির চেয়ে বেশি।

$ find ~ -iregex ".{3,}/.pdf"

কিছুই দেয় না, কিন্তু

$ find ~ -iregex ".+/.pdf"

কাজ করে।

আমি কীভাবে {3,}বৈকল্পিকটি সক্ষম করতে পারি ?


কত দৈর্ঘ্য? ফাইলের নাম দৈর্ঘ্য? পৃষ্ঠার দৈর্ঘ্য?
Ignacio Vazquez-Abram

উত্তর:


18

ধরে নেওয়া যাক আপনি 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'

(এটি বাক্সের বাইরে রেগেক্সপস প্রসারিত)।


20

মানক ওয়াইল্ডকার্ড সহ এটি এখানে সহজ:

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)হয় zshregexp এর ওয়াইল্ডকার্ড সমতুল্য{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)এটি ksh93regexp এর সমতুল্য 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]
wjandrea

7

আমি কীভাবে জানব যে তারা পিডিএফ?

আপনি না জিজ্ঞাসা না। অবশ্যই, আমি পেডেন্টিক হচ্ছি, তবে আপনি তাদের নামের ফাইলগুলির.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করতে চাই। যদিও এই প্রশ্নের ক্ষেত্র বাইরে কিছুটা। আমি এটিও সরাসরি মুখ দিয়ে লিখেছি। আমি এত যত্ন কেন? আমি মুভি এবং অডিও ফাইলগুলি খুঁজছি; বা নির্দিষ্ট ধরণের ফটোগ্রাফ; বা একটি প্রকল্প ডেটা ডিরেক্টরিতে বাইনারি এক্সিকিউটেবল।


1
যদি প্রশ্নকারীর মতো আপনার একই অবস্থা থাকে, যেখানে পিডিএফ ফাইল রয়েছে যার নামগুলি শেষ হয় না .pdf, তবে আপনার পেডেন্ট্রিটি প্রশংসিত হবে। তবে এটি তুলনামূলকভাবে অস্বাভাবিক পরিস্থিতি (আপনার কাজ সত্ত্বেও) এবং আমাদের বিশ্বাস করার কোনও কারণ নেই যে প্রশ্নকারীকে আসলে এর সাথে মোকাবিলা করতে হবে, তাই আমি মনে করি যে আপনি যে পয়েন্টটি তৈরি করছেন, বৈধ থাকাকালীন তা একধরণের বিভ্রান্তিকর - এবং আমি মনে করি আপনি যে বলিষ্ঠভাবে এটিকে উচ্চারণ করেছেন তা উত্তরটিকে "(সম্ভবত) দরকারী নয়" এর রাজ্যে ফেলে দেয়। (অবশ্যই আমার মতামত।)
ডেভিড জেড

যেহেতু আমরা পেডেন্টিক হচ্ছি , আপনি কীভাবে পিওসি || জিটিএফও পলিগ্লটসের মতো পিডিএফ হ্যান্ডেল করবেন ?
স্টিফেন কিট

@ স্টেফেনকিট - আপনি কী জিজ্ঞাসা করছেন তা নিশ্চিত করুন না তবে আমি আগ্রহী। এগুলিকে আমার কাছে সাধারণ পিডিএফগুলির মতো দেখতে বিশেষভাবে ফানকি নাম নয়। এগুলি কি আমার প্রস্তাবিত সমাধানকে ব্যর্থ করবে?
ধনী

@ ডেভিডজেড আমি কী বলব তা নিশ্চিত নই। আমি বলতে চাইছি, আমি ইতিমধ্যে যতটা বলেছি আমি পেডেন্টিক হচ্ছি তা বোঝানো কি একটু প্যাডেন্টিক নয়? এখানে কেন এটি "দরকারী নয়": পিডিএফ সন্ধানের জন্য একটি ভাল সমাধান হ'ল স্ক্রিপ্ট, বাইনারি এক্সিকিউটেবল, লাইব্রেরি, মিডিয়া ফাইল ইত্যাদির সন্ধান করার জন্য একটি অভিযোজ্য সমাধান হওয়া উচিত আমি কীভাবে এর মধ্যে একটিটিকে মানিয়ে নেব তা দেখতেও শুরু করতে পারছি না "সংকুচিত ম্যাক এক্সিকিউটেবল" এর অন্যান্য উত্তর, তবে আমি শিখতে ইচ্ছুক।
ধনী

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