আমি কীভাবে এলএস দিয়ে ফাইল টাইপ প্রদর্শন করব?


12

lsফাইল টাইপ কলাম প্রদর্শন করতে সক্ষম কিনা তা সম্পর্কে আমি অজ্ঞ ।

দ্রুত অনলাইনে অনুসন্ধান করা এবং অনুসন্ধান করা manএইরকম ক্ষমতা প্রকাশ করে নি। এটি কি এটি করতে সক্ষম?

স্পেসিফিকেশন: ফাইলগুলির এক্সটেনশন না থাকলে এটি বিশেষত সহায়ক।

হালনাগাদ

2018-04-28 পর্যন্ত উত্তরগুলি বেশ আকর্ষণীয় হয়েছে তবে তারা যা খুঁজছিল তা তারা সরবরাহ করে নি। আরো নির্দিষ্টভাবে,

  • fileপ্রকৃত ফাইল টাইপ দেয় কিন্তু এটির সাথে ভালভাবে সংহত হয় না ls। বিশেষত, আমি ব্যবহার করিls -lhtrpG --group-directories-first --color=always

  • ls -Fএটি একটি lsসমাধান তবে এটি প্রতীক সরবরাহ করে যা প্রকৃত ফাইল টাইপের কলাম নয়।

এই কারণে আমি যে উত্তরগুলির সন্ধান করছি তা উত্তর হিসাবে চিহ্নিত করিনি।



সম্পর্কিত তথ্য: মানব পাঠযোগ্য: ls -lahtrpF --group-directories-first --color=always /devবা ls -lsahG /dev, এবং প্রোগ্রাম পাঠযোগ্য জন্য ls -lsa /dev। দেখতে man lsবিস্তারিত জানার জন্য ডকুমেন্টেশন।
user1742529

উত্তর:


16

fileআপনার পছন্দসই ফাইল টাইপের তথ্য পাওয়ার জন্য অবশ্যই সঠিক পছন্দ। এর আউটপুটটির সাথে একত্রিত করার জন্য lsআমি ব্যবহার করার পরামর্শ দিই find:

find -maxdepth 1 -type f -ls -exec file -b {} \;

এটি বর্তমান ডিরেক্টরিতে প্রতিটি ফাইল সন্ধান করে এবং ls -dilsএর file -bজন্য আউটপুট পাশাপাশি তার আউটপুট প্রতিটি নিজস্ব লাইনে মুদ্রণ করে । উদাহরণ আউটপুট:

  2757145      4 -rw-rw-r--   1 dessert dessert      914 Apr 26 14:02 ./some.html
HTML document, ASCII text
  2757135      4 -rw-rw-r--   1 dessert dessert      201 Apr 13 15:26 ./a_text_file
UTF-8 Unicode text, with CRLF, LF line terminators

তবে, আপনি যেমন কোনও ফাইল টাইপ লাইন না চেয়ে বরং ফাইল টাইপ কলাম চান , তাই লাইনের মধ্যে নতুন লাইনের চরিত্রটি থেকে মুক্তি পাওয়ার জন্য এখানে একটি উপায়:

find -maxdepth 1 -type f -exec sh -c "ls -l {} | tr '\n' '\t'; file -b {}" \;

নমুনা আউটপুট:

-rw-rw-r-- 1 dessert dessert 914 Apr 26 14:02 ./some.html    HTML document, ASCII text
-rw-rw-r-- 1 dessert dessert 201 Apr 13 15:26 ./a_text_file  UTF-8 Unicode text, with CRLF, LF line terminators

এই নতুন কলামটি বেশ দীর্ঘ, সুতরাং আসুন প্রথম কমা থেকে সমস্ত কিছু কেটে নেওয়া যাক:

find -maxdepth 1 -type f -exec sh -c "ls -l {} | tr '\n' '\t'; file -b {} | cut -d, -f1" \;

এর আউটপুটটি দেখতে এমন দেখাচ্ছে:

-rw-rw-r-- 1 dessert dessert 914 Apr 26 14:02 ./some.html    HTML document
-rw-rw-r-- 1 dessert dessert 201 Apr 13 15:26 ./a_text_file  UTF-8 Unicode text

এটি বেশ সহজ নয়, তাহলে কীভাবে alias? আপনার ~/.bash_aliasesফাইলে নিম্নোক্ত লাইনের সাথে আপনার lsfবর্তমান ডিরেক্টরিটির জন্য উপরের আউটপুটটি পেতে রান চালাতে হবে।

alias lsf='find -maxdepth 1 -type f -exec sh -c "ls -l {} | tr '"'\n'"' '"'\t'"'; file -b {} | cut -d, -f1" \;'

1
যদি আপনি একটি উপনামের পরিবর্তে কোনও ফাংশন ব্যবহার করেন, তবে এটি উদ্ধৃত হেল্পের চেয়ে কম হবে এবং আপনি যদি ব্যবহার করেন pasteবা column, আপনি আরও ভাল সারিবদ্ধতা পেতে পারেন: lsf () { find -maxdepth 1 -type f -exec bash -c 'column <(ls -l "$@") <(file -b "$@" | cut -d, -f1)' _ {} + ; }একই আকার এবং তারিখের কারণে প্রান্তিককরণের উত্তরটি উত্তরটিতে স্পষ্ট হয় না। (এটিও কিছুটা দ্রুত হবে, যেহেতু কমান্ডগুলি প্রতি ফাইলের পরিবর্তে একবারের পরিবর্তে কয়েকবার
ডাকা হবে

@ মুরু অনেক ভাল পরামর্শের জন্য ধন্যবাদ! এই columnaproach আপনার জন্য কাজ করে? এটা ঠিক আউটপুট ছাপে ls -lজন্য প্রতি ফাইল দ্বারা অনুসরণ file, আমার জন্য প্রত্যেক ফাইলের জন্য এর আউটপুট যেন শেল মাত্র করবেন ls -l "$@"; file -b "$@" | cut -d, -f1...
ডেজার্ট

এটা করে. paste.ubuntu.com/p/KjPthXPDPb - উপরের অংশটি ওরফে থেকে এবং নীচের অংশটি ফাংশন, উভয়ই চালিত /etc
মুড়ু

আমি মনে করি আমি সমস্যাটি দেখেছি - যদি columnআউটপুট টার্মিনালে না হয়, আপনাকে কলামের গণনা নির্দিষ্ট করতে হবে বা এটি একের পর এক ফাইল আউটপুট দেবে; সুতরাং column -c "$COLUMNS" ...উভয় ক্ষেত্রেই কাজ করা উচিত।
মুড়ু

আপনি প্রতিটি ফাইলের জন্য (কমপক্ষে?) 5 টি প্রক্রিয়া চালু করছেন, সুতরাং কোনও ডিরেক্টরিতে প্রচুর ফাইল উপস্থিত থাকলে এটি সম্ভবত ধীর হতে চলেছে…
জানুয়ারী

10

আমি মনে করি কোনও ফাইল টাইপ প্রদর্শনের সর্বোত্তম উপায় হ'ল এই আদেশটি ব্যবহার করা:

file <filename>

আপনি যদি কোনও ডিরেক্টরিতে সমস্ত ফাইলের প্রকারের তালিকা করতে চান তবে কেবল এটি ব্যবহার করুন:

file *

আমার কম্পিউটার থেকে <code> ফাইল * </code> নমুনা

যুক্তিগুলি সম্পর্কে আরও তথ্যের জন্য দেখুন:

man file

যদিও এই উত্তরটি ওপি-র প্রশ্নের সরাসরি প্রতিক্রিয়া জানায় না, এটি কোনও ফাইলের মাইম প্রকারের সন্ধানের সঠিক উপায়টি দেখায় এবং সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত। পেতে mime typeশুধুমাত্র ব্যবহার: file --mime-type filename
পেড্রো লোবিটো

@ পেড্রোলোবিটো আমার মনে হয় নিবিড়ভাবে সম্পর্কিত প্রশ্নটিfile বেশ ভালভাবে কভার করে তবে এই প্রশ্নটি আলাদা।
মিষ্টান্ন

আমি এই উত্তরটি দিয়েছি যে আপনি প্রথমে একটি fileউত্তর দিয়েছেন given আমি যখন অন্যকে জবাব দিয়েছিলাম এটি এগুলি পর্যাপ্ত নয় (এটি এর সাথে একীভূত হওয়া দরকার) সুতরাং আমি এটিকে একটি ভোট দিয়ে রাখি। ধন্যবাদ.
ব্যবহারকারী 10853

1
ফাইল * সর্বোত্তম উত্তর
ট্রমাডা

1
file --mime /dev/*বর্তমানের পরিবর্তে ডিরেক্টরি / দেবের তালিকা
মাইমগুলির জন্য

7

স্পষ্টতার জন্য, আমি এটি উল্লেখ করতে যাচ্ছি যে আপনি ফাইলের ধরণটি (শ্রেণিবদ্ধকরণ) lsব্যবহার করে একটি মৌলিক অর্থে ফাইলের ধরনটি দেখতে পাবেন যা ফাইলটির-F নামের উপর নির্ভর করে ফাইলের নামের সাথে একটি চিহ্ন যুক্ত করে:

‘-F’
‘--classify’
‘--indicator-style=classify’
     Append a character to each file name indicating the file type.
     Also, for regular files that are executable, append ‘*’.  The file
     type indicators are ‘/’ for directories, ‘@’ for symbolic links,
     ‘|’ for FIFOs, ‘=’ for sockets, ‘>’ for doors, and nothing for
     regular files.

আপনি যদি তথ্যের আউটপুট প্রথম অক্ষরে কিছুটা কৌতুকপূর্ণভাবে প্রদর্শন করতে পারেন ls -lতবে। wjandrea এর উত্তর এটিকে আরও বিশদে বর্ণনা করে।

তবে আমি মনে করি না এটিই আপনি ফাইল টাইপ দ্বারা বোঝাচ্ছেন। lsশুধুমাত্র ডিরেক্টরির তালিকা এ (যা দোকান ফাইলের নামের) এবং inodes (যা "টাইপ", এই অর্থে উল্লেখ করেছে আগে সহ দোকান মেটাডাটা,) - কমান্ড ভিতরে নিয়মিত ফাইল দেখাচ্ছে না।

সুতরাং, lsকমান্ডটি ফাইলের ধরণটি এই অর্থে প্রদর্শন করতে পারে না এটি কোনও জেপিজি চিত্র বা বাইনারি ফাইল বা একটি পাঠ্য ফাইল বা কোনও ধরণের লিবারঅফিস নথি, কারণ এতে সেই তথ্য নেই।

তার জন্য, সিঙ্গরিয়ামের উত্তরটি উল্লেখ করার সাথে সাথে আপনার fileকমান্ডটি দরকার যা তাদের প্রকারটি নির্ধারণের জন্য প্রথম 50-100 কেবি বা ফাইলগুলির বিষয়বস্তুগুলিকে দেখায়।


@ জানা এই পতাকাটির প্রতি আমার দৃষ্টি আকর্ষণ করার জন্য আপনাকে ধন্যবাদ। এটি আপাতত এটি করবে যদিও আমি যা খুঁজছিলাম তা তা নয় (প্রকৃত ফাইল টাইপ)। এই জন্য আমি এটি ভোট দিতে হবে।
ব্যবহারকারী 10853

3

ফাইল টাইপের একটি ফর্ম হ'ল কোনও ফাইল কোনও নিয়মিত ফাইল, ডিরেক্টরি, ডিভাইস, সিমলিংক ইত্যাদি etc. lsবিকল্পগুলি ব্যবহার করে -lবা এটি প্রদর্শন করতে পারে -F

  • বিকল্পের -lসূচনার সাথে ফাইল টাইপটি একক অক্ষর হিসাবে প্রদর্শিত হবে, যেমন:

    $ ls -l
    drwxrwxr-x 2 user user 4096 Dec 11 00:18 DIR
    -rw-rw-r-- 1 user user    0 Dec 11 00:18 FILE
    lrwxrwxrwx 1 user user    4 Dec 11 00:19 LINK -> FILE
    

    যেখানে -নিয়মিত ফাইল থাকে, dএটি একটি ডিরেক্টরি এবং lএকটি সিমিলিংক।

  • বিকল্পটি -Fপ্রত্যয় হিসাবে ফাইল টাইপটি প্রদর্শন করবে, যেমন:

    $ ls -F
    DIR/ FILE LINK@
    

    যেখানে কোনও প্রত্যয় একটি নিয়মিত ফাইল নয়, /এটি একটি ডিরেক্টরি এবং @একটি সিমিলিংক।

এগুলি সম্পর্কে আরও তথ্য info coreutils 'ls invocation'এখানে সংক্ষিপ্তসারে পাওয়া যায় :

এর জন্য -l:

‘-’ regular file
‘b’ block special file
‘c’ character special file
‘C’ high performance (“contiguous data”) file
‘d’ directory
‘D’ door (Solaris 2.5 and up)
‘l’ symbolic link
‘M’ off-line (“migrated”) file (Cray DMF)
‘n’ network special file (HP-UX)
‘p’ FIFO (named pipe)
‘P’ port (Solaris 10 and up)
‘s’ socket
‘?’ some other file type

এর জন্য -F:

nothing for regular files
‘*’ regular files that are executable
‘/’ directories
‘@’ symbolic links
‘|’ FIFOs
‘=’ sockets
‘>’ doors
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.