ডিরেক্টরিতে থাকা সমস্ত ফাইলের প্রকারটি কীভাবে আমি প্রদর্শন করতে পারি?


12

এমন কোন কমান্ড আছে যা আমাকে নির্দিষ্ট ডিরেক্টরিতে বলে যে কোন ধরণের ফাইল বিদ্যমান?

আমি যেমন একটি কমান্ড ব্যবহার করে ফাইল টাইপ খুঁজে পেতে পারেন od -c myfile | less

তবে আমি জানি না এটি একটি ডিরেক্টরিতে সমস্ত ফাইলের জন্য কীভাবে করা যায়।

উত্তর:


19

যদিও 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কেবলমাত্র একটি উদাহরণ, আপনার এটি অনুসন্ধান করতে চান এমন প্রকৃত ডিরেক্টরিটির নামে পরিবর্তন করা উচিত), প্রতিটি আইটেমকে পরিবর্তে সংরক্ষণ করা$file
  • file "$file": fileপাওয়া আইটেম প্রতিটি চালান ।
  • cut -d: -f 2: কেবলমাত্র দ্বিতীয় ক্ষেত্র মুদ্রণ করুন (ক্ষেত্রগুলি দ্বারা সংজ্ঞায়িত :)
  • sed 's/^ //; s/ +/ /g' : লাইনের শুরু থেকে স্পেসগুলি সরিয়ে ফেলুন এবং একটানা স্পেসে পরপর স্থানগুলিকে রূপান্তর করুন।
  • sort -u : নকল ফাইলের প্রকারগুলি সরান

ধন্যবাদ, তবে আমি ঠিক কপি করেছি এবং অতীত করেছি "দির / * এ ফাইলের জন্য; ফাইলটি" $ ফাইল "| কাট-
ডি: -ফ

2
@ অ্যালেক্স প্রথমত, দয়া করে সর্বদা আপনার সঠিক ত্রুটিটি উল্লেখ করুন, এটি বলে যে আপনি "ERROR" পেয়েছেন খুব দরকারী নয়। যাইহোক, ত্রুটিটি সম্ভবত কারণ আপনার কোনও ডিরেক্টরি নাম নেই dir/, এটি কেবল একটি উদাহরণের নাম ছিল, আপনাকে এটি একটি প্রকৃত ডিরেক্টরিতে পরিবর্তন করতে হবে: for file in /home/alex/*; do ... doneউদাহরণস্বরূপ।
টেরডন

ধন্যবাদ, যদি আপনি আমার ভুল কাজটি করেন (... আমি ভেবেছিলাম dir হ'ল কমান্ড হ'ল ls ডিরেক্টরি না-সরি- এছাড়াও আমি আপনার উত্তর সম্পাদনা করা ভাল বলে মনে করি) আপনি কেবল "ভুল" দেখেন আর কিছুই নয়।
মোহাম্মদ রেজা রেজওয়ানি

সুন্দর কাজ, থ্যাঙ্কস, তবে আমি উদাহরণস্বরূপ চার লাইনের "আইডি 3 সংস্করণ 2.3.0 সহ অডিও ফাইলটিতে দেখেছি" বা একাধিক "আইএসও মিডিয়া, এমপিইজি ভি 4 সিস্টেম, সংস্করণ 2" রয়েছে। আমি "নকল সরান" সম্পর্কে নিশ্চিত নই।
মোহাম্মদ রেজা রেজওয়ানি 17

@ অ্যালেক্স পর্যাপ্ত, উত্তর সম্পাদিত। আপনার কোনও সদৃশ হওয়া উচিত নয়। sort -uতাদের সরিয়ে দেবে, লাইন আলাদা হতে হবে (তারা স্পেস একটি আলাদা নম্বর থাকতে পারে, যা তাদের অ অভিন্ন তোলে)।
টেরডন

3

আমি সম্ভবত এরকম কিছু করতাম -

find . -type f -exec file {}  \;

এটি বর্তমান পথ থেকে ফাইলগুলির জন্য অনুসন্ধান করবে (যেমন কোনও ডিরেক্টরি নেই) এবং তারপরে fileপ্রতিটি ফাইলের কমান্ডটি কার্যকর করা হবে।


1

এটা চেষ্টা কর:

ls | xargs file -b | sort | uniq

কিভাবে এটা কাজ করে:

ls : ডিরেক্টরি সামগ্রীর তালিকা

ফাইল-বি : ফাইলের ধরন নির্ধারণ; আউটপুট লাইনে ফাইলের নামগুলি প্রিপেন্ড করবেন না

সাজান : বাছাই লাইন

ইউনিীক : পুনরাবৃত্তি রেখাগুলি বাদ দিন



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