এমন কোন কমান্ড আছে যা আমাকে নির্দিষ্ট ডিরেক্টরিতে বলে যে কোন ধরণের ফাইল বিদ্যমান?
আমি যেমন একটি কমান্ড ব্যবহার করে ফাইল টাইপ খুঁজে পেতে পারেন od -c myfile | less।
তবে আমি জানি না এটি একটি ডিরেক্টরিতে সমস্ত ফাইলের জন্য কীভাবে করা যায়।
এমন কোন কমান্ড আছে যা আমাকে নির্দিষ্ট ডিরেক্টরিতে বলে যে কোন ধরণের ফাইল বিদ্যমান?
আমি যেমন একটি কমান্ড ব্যবহার করে ফাইল টাইপ খুঁজে পেতে পারেন od -c myfile | less।
তবে আমি জানি না এটি একটি ডিরেক্টরিতে সমস্ত ফাইলের জন্য কীভাবে করা যায়।
উত্তর:
যদিও od -cপ্রকৃতপক্ষে কোনও ফাইলের বিষয়বস্তু প্রদর্শন করা হবে তবে ফাইলের ধরণটি পাওয়ার পক্ষে এটি ভাল উপায় নয়। কিছু ফাইলের মধ্যে ফাইলের ধরণ সহ একটি শিরোনাম থাকবে, সমস্ত হবে না। আরও ভাল উপায় হ'ল আদেশ file:
$ echo "hello" > foo.txt
$ file foo.txt
foo.txt: ASCII text
সুতরাং, ডিরেক্টরিতে সমস্ত ফাইল ধরণের তালিকা পেতে, আপনি এটি করতে পারেন:
for file in dir/*; do file "$file" | cut -d: -f 2; done | sort -u
PNG image data, 1500 x 500, 8-bit/color RGBA, non-interlaced
ASCII text
directory
GIF image data, version 89a, 22 x 22
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=becf821e4d814fdb69306d0b3f686eb06992f5e5, stripped
for file in dir/*; do ... done;: প্রতিটি ক্ষেত্রে পুনরাবৃত্তি dir( dirকেবলমাত্র একটি উদাহরণ, আপনার এটি অনুসন্ধান করতে চান এমন প্রকৃত ডিরেক্টরিটির নামে পরিবর্তন করা উচিত), প্রতিটি আইটেমকে পরিবর্তে সংরক্ষণ করা$filefile "$file": fileপাওয়া আইটেম প্রতিটি চালান ।cut -d: -f 2: কেবলমাত্র দ্বিতীয় ক্ষেত্র মুদ্রণ করুন (ক্ষেত্রগুলি দ্বারা সংজ্ঞায়িত :)sed 's/^ //; s/ +/ /g' : লাইনের শুরু থেকে স্পেসগুলি সরিয়ে ফেলুন এবং একটানা স্পেসে পরপর স্থানগুলিকে রূপান্তর করুন।sort -u : নকল ফাইলের প্রকারগুলি সরানdir/, এটি কেবল একটি উদাহরণের নাম ছিল, আপনাকে এটি একটি প্রকৃত ডিরেক্টরিতে পরিবর্তন করতে হবে: for file in /home/alex/*; do ... doneউদাহরণস্বরূপ।
sort -uতাদের সরিয়ে দেবে, লাইন আলাদা হতে হবে (তারা স্পেস একটি আলাদা নম্বর থাকতে পারে, যা তাদের অ অভিন্ন তোলে)।
আমি সম্ভবত এরকম কিছু করতাম -
find . -type f -exec file {} \;
এটি বর্তমান পথ থেকে ফাইলগুলির জন্য অনুসন্ধান করবে (যেমন কোনও ডিরেক্টরি নেই) এবং তারপরে fileপ্রতিটি ফাইলের কমান্ডটি কার্যকর করা হবে।
এটা চেষ্টা কর:
ls | xargs file -b | sort | uniq
কিভাবে এটা কাজ করে:
ls : ডিরেক্টরি সামগ্রীর তালিকা
ফাইল-বি : ফাইলের ধরন নির্ধারণ; আউটপুট লাইনে ফাইলের নামগুলি প্রিপেন্ড করবেন না
সাজান : বাছাই লাইন
ইউনিীক : পুনরাবৃত্তি রেখাগুলি বাদ দিন
file -b *পরিবর্তে ব্যবহার করতে পারেন । ls | xargs file -bls