আমি কীভাবে `ls -l` আউটপুট থেকে একটি ক্ষেত্র / কলাম নির্বাচন করব?


22

আমার লক্ষ্য প্রতারণামূলকভাবে সহজ (কমপক্ষে আমার কাছে)। আমি আউটপুট নিতে চান ls -lবা ls -lhএবং মাত্র একটি ক্ষেত্র নির্বাচন করুন।

আমি এটি যথাসম্ভব বুলেটপ্রুফ হওয়ার জন্য সন্ধান করছি, যার অর্থ, আমি ধরে নিই যে ফাইলের নামগুলিতে একটি পরিবর্তনশীল সংখ্যক স্থান থাকতে পারে, ক্ষেত্রের সমস্ত কিছুর দৈর্ঘ্য একই নয় same

স্ক্রিপ্ট থাকার জন্য বোনাস পয়েন্ট যা ক্ষেত্রের নাম (বা এমনকি একটি ক্ষেত্রের নম্বর) নেবে এবং তারপরে ক্ষেত্রের বিষয়বস্তুগুলি ফিরিয়ে দেবে।

আমি ঘুরতে চাই

এখানে চিত্র বর্ণনা লিখুন

মধ্যে:

এখানে চিত্র বর্ণনা লিখুন

উত্তর:


41

ব্যবহার করে দেখুন ls -l | awk '{print $7}'

awk কলামগুলি নির্বাচন করে যাতে এটি এই কাজের জন্য উপযুক্ত।


3
@ ওর্মাজ দ্বারা ব্যাখ্যা করা হয়েছে: নির্দিষ্ট জায়গাগুলিতে নির্দিষ্ট অংশে যে তথ্য পাওয়া যাচ্ছে তার উপর নির্ভর করবেন না lsfindকমান্ড এইসা সহায়ক।
ধানের ল্যান্ডাউ

@ প্যাডিল্যান্ডউ আমি কীভাবে মেগাবাইটে ফাইলের আকার মুদ্রণ করতে ফাইন্ড কমান্ডটি ব্যবহার করব ls -l --block-size=M?
সারপ্রাইজডগ

@ বেঞ্জামিন - lsকমান্ডটি পসিক্স মান নয়, সুতরাং নির্ভর করে lsএমন একটি স্ক্রিপ্ট বিভিন্ন সিস্টেমে বা এমনকি সময়ের সাথে সাথে ভেঙে যেতে পারে। আরও তথ্যের জন্য এই পৃষ্ঠাতে @ormaaj এর উত্তর দেখুন। আপনি যা চান তা করার একটি উপায় হ'ল বাশ লুপ। এখানে একটি উদাহরণ। for FILENAME in *; do FILESIZE=$(( $( stat --format=%s "${FILENAME}" ) / 1024 )); echo "${FILENAME}" ${FILESIZE}; done। অবশ্যই, পরিবর্তে echo, আপনি আপনার প্রসেসিং ব্যবহার করবেন।
ধানের ল্যান্ডউ

@ প্যাডিলান্ডা আমি সবেমাত্র অনুসন্ধান কমান্ডের আউটপুটটি পাইপিংয়ের কাজ শেষ করেছি ... | xargs -d '\n' du -mযা ঠিক তেমন কাজ করে।
সারপ্রাইজডগ

@ বেনজামিন আপনি হয়ত -execবিকল্পটি দেখতে চাইবেন find
ধানের ল্যান্ডাউ

17

কখনও পার্স ম । জিএনইউ ব্যবহার করুন find। অথবা যদি বহনযোগ্যতা গুরুত্বপূর্ণ না হয় stat(1),।

find . -maxdepth 1 -printf '%Td\n'

ফাইলের নামগুলি লাইন বাই লাইনের তালিকা ছাড়াও এবং ক্ষেত্রগুলিতে বিভক্ত হওয়ার জন্য ডেটা পড়ার জন্য দেখুন: বাশফএকিউ / 001

বেশিরভাগ পরিস্থিতিতে ফাইলনেমগুলির একটি নতুন লাইন-বিস্মৃত তালিকাটি নির্ভরযোগ্যভাবে পড়ার কোনও পদ্ধতি নেই।


1

আপনি শেলের মতো নির্দিষ্ট কলামটি আনতে পারেন:

ls -al | while read perm bsize user group size month day time file; do echo $day; done

বা @ কোরি উত্তরawk হিসাবে দেখানো হয়েছে , সামঞ্জস্যের পরেও কাজ করবে (যেহেতু স্থির কলাম রয়েছে), বা অন্য যাই হোক, তবে মূল সমস্যাটি হ'ল এটি নির্ভরযোগ্য এবং বুলেটপ্রুফ হবে না (যেমন ইউনিক্সে এটি হতে পারে , না , এবং এটি) আর্গুমেন্টের উপর নির্ভর করে পরিবর্তনগুলি) এটি মেশিন বান্ধব করে তোলে না তাই কমান্ডটি মোটেও পার্স করার পরামর্শ দেওয়া হয় নাcut -c44-45ls$6$7ls

সর্বোত্তম হ'ল বিভিন্ন উপলব্ধ কমান্ডগুলি ব্যবহার করা যেমন findবা stat, যা আপনার প্রয়োজন অনুসারে আউটপুট ফর্ম্যাট করতে প্রাসঙ্গিক বিকল্প সরবরাহ করতে পারে। উদাহরণ স্বরূপ:

$ stat -c "%x %n" *
2016-04-10 04:53:07.000000000 +0100 001.txt
2016-04-10 05:08:42.000000000 +0100 7c1c.txt

পরিবর্তনের মাত্র কয়েক দিনের কলামটি ফেরত পেতে, এই উদাহরণটি ব্যবহার করে দেখুন:

stat -c "%x" * | while read ymd; do date --date="$ymd" "+%d"; done

এটি লক্ষণীয় যে জিএনইউতে statবিএসডি-র বিভিন্ন বিকল্প থাকতে পারে stat, তাই এটি এখনও বিভিন্ন অপারেটিং সিস্টেম জুড়ে বুলেটপ্রুফ হবে না।


1
উল্লেখের জন্য +1 যে ব্যবহারের পাশাপাশি এল পার্স করা উচিত নয় statdateতবে সেটআপটি ভুলভাবে রয়েছে। আপনার যোগ করা উচিত --date=$ymd, যেহেতু dateনিজেই বর্তমান দিনটি মুদ্রণ করবে, তবে এখানে উদ্দেশ্যটি হ'ল ফাইলটির তারিখের ফর্ম্যাটটি রূপান্তর করা
সের্গি কলডিয়াজহনি

ls -la | cut -c32-33মোট সততা কমান্ড শুধু সম্পূর্ণরূপে অবিশ্বস্ত না শুধুমাত্র ফাইলের নামের সাথে সম্ভব ফাঁদ কারণ, কিন্তু কেবল কারণ এটি ব্যবহারকারীর নাম 'দৈর্ঘ্য এবং ফাইল' উপর আকার নির্ভর করে। stat -c "%x" *.*কমান্ড দেখে ঠিক মনে হচ্ছে, কিন্তু ব্যবহার করে *.*আপনি এটি শুধুমাত্র একটি ডট ধারণকারী ফাইলের নামের জন্য restricing করছি। আমার ধারণা, গোপন ফাইলগুলি ধরাও উদ্দেশ্য ছিল; যে ক্ষেত্রে আপনি পূর্বেই dotfiles জন্য globbing সক্ষম এবং ব্যবহার করা উচিত *পরিবর্তে *.*: shopt -s dotglob; stat -c "%x" * | [...]
কোস

আহ এবং সার্জ এটিও বলেছিল, আপনার কমান্ডটি যুক্ত --date="$ymd"করা উচিত date, অন্যথায় এটি মাসের বর্তমান দিনটি মুদ্রণ করবে।
kos

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