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


35

আমি ব্যাশ স্ক্রিপ্টের মধ্যে ব্যবহারের জন্য কোনও ফাইলের পরিবর্তিত সময় সন্ধান এবং মুদ্রণের জন্য একটি পদ্ধতি চাই।

আমি সাথে এসেছি:

ls -l $filename | cut -d ' ' -f '6-8'

কোন ফলাফল:

Jul 26 15:05

যদিও আমি পার্সিং এড়াতে চাই, তবুও lsএটি বছরের জন্য এটি কার্যকর হবে।

আদর্শভাবে আমি dateকমান্ডের ডিফল্ট আউটপুটের অনুরূপ একটি আউটপুট দেখতে চাই ।

Tue Jul 26 15:20:59 BST 2016

অন্য কোন দরকারী পদ্ধতি উপলব্ধ?

উত্তর:


46

ব্যবহার করবেন না ls, এটি এর জন্য একটি কাজ stat:

stat -c '%y' filename

-cআমাদের নির্দিষ্ট আউটপুট পেতে দেয়, এখানে %yআমাদের মানব পাঠযোগ্য বিন্যাসে ফাইলের সর্বশেষ পরিবর্তিত সময়টি আসবে। যুগের পর থেকে সেকেন্ডে সময় পেতে %Y:

stat -c '%Y' filename

আপনি যদি ফাইলের নামও চান তবে ব্যবহার করুন %n:

stat -c '%y : %n' filename
stat -c '%Y : %n' filename

আপনার প্রয়োজন অনুসারে ফর্ম্যাট স্পেসিফায়ার সেট করুন। চেক man stat

উদাহরণ:

% stat -c '%y' foobar.txt
2016-07-26 12:15:16.897284828 +0600

% stat -c '%Y' foobar.txt
1469513716

% stat -c '%y : %n' foobar.txt
2016-07-26 12:15:16.897284828 +0600 : foobar.txt    

% stat -c '%Y : %n' foobar.txt
1469513716 : foobar.txt

আপনি যদি আউটপুট পছন্দ করেন Tue Jul 26 15:20:59 BST 2016তবে এপোক সময়টি ইনপুট হিসাবে ব্যবহার করুন date:

% date -d "@$(stat -c '%Y' a.out)" '+%a %b %d %T %Z %Y'
Tue Jul 26 12:15:21 BDT 2016

% date -d "@$(stat -c '%Y' a.out)" '+%c'               
Tue 26 Jul 2016 12:15:21 PM BDT

% date -d "@$(stat -c '%Y' a.out)"
Tue Jul 26 12:15:21 BDT 2016

dateআপনার প্রয়োজন মেটাতে ফর্ম্যাট নির্দিষ্টকরণগুলির পরীক্ষা করুন Check man dateখুব দেখুন ।


5
এই উত্তরের আরও পরে, মনে রাখবেন যে lsসিস্টেমগুলিতে অবিচ্ছিন্নভাবে প্রয়োগ করা হয়েছে এবং তাই কখনও কোনও ধরণের অটোমেশনের জন্য ব্যবহার করা উচিত নয় । পরিবর্তে, স্ক্রিপ্ট লেখার সময় statএবং findযখন কমান্ড ব্যবহার করুন ।
ধানের ল্যান্ডউ

1
চমৎকার। আমি এই ছোট ধন সম্পর্কে জানতাম না। এতগুলি * নিক্স / লিনাক্স পরিবেশে এখনও আবিষ্কার করা যায়নি।
কেন ইঙ্গ্রাম

1

আমি চেষ্টা করেছিলাম

ls -l $filename | cut -d ' ' -f '6-8'

তবে তারিখটি 10 ​​এর চেয়ে কম হলে এটি সময় মিস করে। তারিখের আগে অতিরিক্ত স্থানের কারণে এটি যদি 10 এর কম হয় তবে এটি চেষ্টা করুন:

filename="test.txt"
ls -l $filename | awk -F ' ' '{print $6" "$7" "$8}'

Awk কমান্ড সমস্ত স্পেস (-F '') দ্বারা পৃথক করা ক্ষেত্রগুলি মুদ্রণ করে। আশা করি এটা কাজ করবে. আমি জানি যে এটি আসল প্রশ্নের উত্তর দেয় না তবে ls কমান্ডের জন্য কেবল তারিখ এবং সময়ের জন্য একটি ব্যাখ্যা ation আপনি যখন গুগল "উবুন্টু ফাইলের তারিখ এবং সময় পান" তখন এটি এই প্রশ্নের শীর্ষে তালিকাবদ্ধ করে, যা আমি খুঁজছিলাম, যেহেতু আমারও বছরের দরকার নেই। বছর, তারিখ এবং সময়ের জন্য, আপনি নীচের একটি আদেশ ব্যবহার করতে পারেন। % মি মাসের সংখ্যা মুদ্রণ করে। % b মাসের সংক্ষিপ্তসার মুদ্রণ করে: আপনার ঘন্টা এবং মিনিটের প্রয়োজন না হলে% এইচ:% এম ছাড়ুন। % -d মাসের দিনের জন্য শীর্ষস্থানীয় শূন্য প্রিন্ট করে না।

date -r $filename +"%Y %m %-d %H:%M"
date -r $filename +"%y %m %-d %H:%M"
date -r $filename +"%Y %b %-d %H:%M"
date -r $filename +"%y %b %-d %H:%M"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.