किसी फ़ाइल का संशोधित समय कैसे प्रदर्शित करें?


35

मैं किसी फ़ाइल के संशोधित समय को खोजने और मुद्रित करने के लिए एक विधि चाहता हूँ, एक bash स्क्रिप्ट के भीतर उपयोग के लिए।

मैं साथ आया हूँ:

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अपनी आवश्यकता को पूरा करने के लिए प्रारूप के विवरणों की जाँच करें । देखें 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 कमांड पर एक स्पष्टीकरण है। जब आप Google "उबंटू फाइल की तारीख और समय प्राप्त करते हैं" तो यह इस सवाल को सबसे ऊपर सूचीबद्ध करता है, जो कि मैं देख रहा था, क्योंकि मुझे वर्ष की भी आवश्यकता नहीं है। वर्ष, दिनांक और समय के लिए, आप नीचे दिए गए आदेशों में से एक का प्रयास कर सकते हैं। % m प्रिंट महीने संख्या। % b प्रिंट महीने का संक्षिप्त नाम:% H:% M को ड्रॉप करें यदि आपको घंटे और मिनट की आवश्यकता नहीं है। % -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"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.