ফাইল টাইপ দ্বারা ফাইলগুলি কীভাবে সন্ধান করবেন?


9

আমি জানি আমি ব্যবহার করে ফাইলগুলি জানতে পারেন find: find . -type f -name 'sunrise'। উদাহরণ ফলাফল:

./sunrise
./events/sunrise
./astronomy/sunrise
./schedule/sunrise

আমিও জানি আমি একটি ফাইলের ফাইল টাইপ নির্ধারণ করতে পারেন: file sunrise। উদাহরণ ফলাফল:

sunrise: PEM RSA private key

তবে আমি কীভাবে ফাইল টাইপ করে ফাইলগুলি সন্ধান করতে পারি?

উদাহরণস্বরূপ my-find . -type f -name 'sunrise' -filetype=bash-script:

./astronomy/sunrise
./schedule/sunrise

1
ফাইন্ড --filetypeকমান্ড বা অন্য কোনও কিছুর বিকল্প নেই যা আপনাকে ফাইলের ধরণটি জানাবে। কেবলমাত্র আপনি যা করতে পারেন তা ব্যবহার করুন --exec file {} \;এবং তারপরে আপনি পাইপ grep Bourneস্ক্রিপ্টগুলি সন্ধান করছেন বা grep Perlযদি আপনি পার্ল স্ক্রিপ্টগুলি বা সেই লাইন বরাবর কিছু সন্ধান করছেন তবে এটিতে পাইপ করুন ।
নাসির রিলে

উত্তর:


13

ইউনিক্স সিস্টেমে "ফাইলের ধরণগুলি" হ'ল নিয়মিত ফাইল, ডিরেক্টরি, নামক পাইপ, চরিত্রের বিশেষ ফাইল, প্রতীকী লিঙ্ক ইত্যাদি files এগুলি সেই ধরণের ফাইল যা findতার -typeবিকল্প দিয়ে ফিল্টার করতে পারে ।

findউপযোগ নিজেই একটি "শেল স্ক্রিপ্ট", "JPEG চিত্র ফাইল" বা অন্য কোন মধ্যে নয় আলাদা করতে পারে এমন নিয়মিত ফাইলের প্রকার । এই ধরণের ডেটা fileইউটিলিটি দ্বারা পৃথক করা যেতে পারে , যা ফাইলগুলির মধ্যে নির্দিষ্ট স্বাক্ষরগুলি তাদের প্রকার নির্ধারণের জন্য দেখায়।

বিভিন্ন ধরণের ডেটা ফাইলের লেবেল করার একটি সাধারণ উপায় হ'ল তাদের মাইম টাইপ , এবং fileকোনও ফাইলের মাইমে টাইপ নির্ধারণ করতে সক্ষম।


ব্যবহার fileসঙ্গে findনিয়মিত ফাইল MIME প্রকার, এবং ব্যবহার করে একমাত্র শেল স্ক্রিপ্ট এটি সনাক্ত করতে:

find . -type f -exec sh -c '
    case $( file -bi "$1" ) in
        */x-shellscript*) exit 0
    esac
    exit 1' sh {} ';' -print

বা, ব্যবহার করে bash,

find . -type f \
    -exec bash -c '[[ "$( file -bi "$1" )" == */x-shellscript* ]]' bash {} ';' \
    -print

যোগ -name sunriseসামনে -execআপনি শুধুমাত্র এই নামের স্ক্রিপ্ট সনাক্ত করতে ইচ্ছুক।

findকমান্ড উপরে অথবা বর্তমান ডিরেক্টরির নীচের সমস্ত নিয়মিত ফাইল পাবেন, এবং প্রতিটি ফাইলের কল জন্য একটি সংক্ষিপ্ত ইন-লাইন শেল স্ক্রিপ্ট। এই স্ক্রিপ্টটি file -biপাওয়া ফাইলটিতে চলে এবং শূন্য প্রস্থান স্থিতি দিয়ে প্রস্থান করে যদি সেই কমান্ডের আউটপুটটিতে স্ট্রিং থাকে /x-shellscript। যদি আউটপুটে সেই স্ট্রিংটি না থাকে তবে এটি একটি শূন্য-বহির্গমন স্থিতি সহ প্রস্থান করে যা findপরবর্তী ফাইলের সাথে সাথেই অবিরত হতে থাকে causes যদি ফাইলটি শেল স্ক্রিপ্ট হিসাবে দেখা যায়, findকমান্ডটি ফাইলের পথের নাম আউটপুট করতে এগিয়ে যাবে ( -printশেষে, যা অন্য কোনও ক্রিয়া দ্বারা প্রতিস্থাপনও করা যেতে পারে)।

file -biকমান্ড ইচ্ছা আউটপুট ফাইলের MIME প্রকার। লিনাক্সে শেল স্ক্রিপ্টের (এবং বেশিরভাগ অন্যান্য সিস্টেমে), এটির মতো কিছু হবে

text/x-shellscript; charset=us-ascii

fileইউটিলিটির সামান্য পুরানো বৈকল্পিক সহ সিস্টেমে , এটি হতে পারে

application/x-shellscript

সাধারণ বিট হ'ল /x-shellscriptসাবস্ট্রিং।

লক্ষ্য করুন MacOS উপর, আপনি ব্যবহার করতে হবে file -bIপরিবর্তে file -biকারণ কারণে ( -iবিকল্প কিছু পুরোপুরি ভিন্ন না)। ম্যাকোসের আউটপুটটি লিনাক্স সিস্টেমের মতো similar


আপনি কাজ করতে পারে যে অন্য সঙ্গে প্রতিটি পাওয়া শেল স্ক্রিপ্ট উপর কিছু কাস্টম ক্রিয়াটি জানতে চাইলে তার স্ত্রী -execস্থানে -printমধ্যে findউপরে কমান্ড, কিন্তু এটি সম্ভব করতে হবে

find . -type f -exec sh -c '
    for pathname do
        case $( file -bi "$pathname" ) in
            */x-shellscript*) ;;
            *) continue
        esac

        # some code here that acts on "$pathname"

    done' sh {} +

বা, সাথে bash,

find . -type f -exec bash -c '
    for pathname do
        [[ "$( file -bi "$pathname" )" != */x-shellscript* ]] && continue

        # some code here that acts on "$pathname"

    done' bash {} +

সম্পর্কিত:


1

আপনি findপ্রতিটি পাওয়া ফাইলটিতে এক্সিকিউট করতে পারেন এবং তারপরে আপনার আগ্রহী ফলাফলের জন্য গ্রেপ করতে পারেন।

# When looking for ASCII Text
find . -type -exec file {} \; | grep "ASCII"
# or for MS Word Documents
find . -type f -exec file {} \; | grep "Microsoft Word"

মিথ্যা পজিটিভ মিলগুলির সংখ্যা কম রাখার জন্য আপনার প্রত্যাশার যতটুকু সম্ভব অনুসন্ধানের প্যাটার্নটি করার পরামর্শ দিই।

সাবধান হন যে তাদের ফাইলনামগুলিতে নতুন লাইনের ফাইলগুলি এই পদ্ধতির সাথে সমস্যা তৈরি করতে পারে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.