फ़ाइल नाम में दिनांक और समय कैसे डालते हैं?


23

मैं एक कमांड निष्पादित करने की कोशिश कर रहा हूं और आउटपुट फ़ाइल नाम में दिनांक और समय डालना चाहूंगा।

यहाँ एक नमूना कमांड है जिसे मैं चलाना चाहता हूँ।

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

दिनांक समय प्रारूप अंडरस्कोर के साथ कुछ भी समझदार हो सकता है। यहां तक ​​कि अगर U AM और PM का उपयोग नहीं किया जा सकता है।


यदि बैश नहीं है, तो आप किस शेल का उपयोग कर रहे हैं?
रयान

ओह यह बैश है ... मेरा मतलब है बैश स्क्रिप्ट *
विस्कॉन 25'16

आप पाइपिंग नहीं कर रहे हैं, आप पुनर्निर्देशित कर रहे हैं। और सवाल वही होगा अगर आप रिडायरेक्ट नहीं कर रहे थे। शीर्षक अपडेट कर रहा है।
मिकेल

जवाबों:


46

यदि आप फ़ाइल नाम के रूप में वर्तमान डेटाटाइम का उपयोग करना चाहते हैं, तो आप प्रतिस्थापन का उपयोग dateऔर कमांड कर सकते हैं ।

 $ md5sum /etc/mtab > "$(date +"%Y_%m_%d_%I_%M_%p").log"

यह फ़ाइल 2016_04_25_10_30_AM.log(हालांकि, वर्तमान डेटाटाइम के साथ) में md5 हैश के /etc/mtabसाथ इसकी सामग्री के रूप में बनाई जा रही है ।

कृपया ध्यान दें कि 12-घंटे के प्रारूप टाइमस्टैम्प वाले फ़ाइलनाम संभवतः उस तरह से नाम से सॉर्ट नहीं होंगे, जिस तरह से आप उन्हें सॉर्ट करना चाहते हैं। आप इसके बजाय 24-घंटे प्रारूप टाइमस्टैम्प का उपयोग करके इस समस्या से बच सकते हैं।

यदि आपको उस विशिष्ट दिनांक प्रारूप का उपयोग करने की आवश्यकता नहीं है, तो आप आईएसओ 8601 अनुरूप डेटाटाइम प्रारूप का उपयोग करने पर विचार कर सकते हैं। मान्य ISO 8601 डेटाइम प्रतिनिधित्व प्रस्तुत करने के कुछ उदाहरणों में शामिल हैं:

 $ date +"%FT%T"
 2016-04-25T10:30:00

 $ date +"%FT%H%M%S"
 2016-04-25T103000

 $ date +"%FT%H%M"
 2016-04-25T1030

 $ date +"%Y%m%dT%H%M"
 20160425T1030

यदि आप "सुरक्षित" फ़ाइलनाम चाहते हैं (उदाहरण के लिए, विंडोज के साथ संगतता के लिए), तो आप कॉलोन को समय भाग से हटा सकते हैं।

कृपया ध्यान रखें कि उपरोक्त उदाहरण सभी स्थानीय प्रणाली के समय को मानते हैं। यदि आपको एक समय प्रतिनिधित्व की आवश्यकता है जो समय क्षेत्र के अनुरूप है, तो आपको एक समय क्षेत्र ऑफसेट या यूटीसी निर्दिष्ट करना चाहिए। आप dateइस तरह से अपने कॉल के प्रारूप भाग में "% z" का उपयोग करके एक आईएसओ 8601 अनुरूप समय क्षेत्र ऑफसेट प्राप्त कर सकते हैं :

 $ date +"%FT%H%M%z"
 2016-04-25T1030-0400

आप ध्वज dateको निर्दिष्ट करके और कॉल -uको "Z" जोड़कर अपने कॉल में UTC का समय प्राप्त कर सकते हैं और यह इंगित करने के लिए कि यह समय UTC है:

 $ date -u +"%FT%H%MZ"
 2016-04-25T1430Z

@ मिकेल क्या आपने और मैंने क्रॉस-एडिट किया?
रयान

संभवतः। मैंने बस "सबस्क्रिप्शन" को "कमांड प्रतिस्थापन" में बदल दिया। अब मैं कर रहा हूँ, इसलिए कृपया जैसा चाहें संपादित करें।
मिकेल

@ मिकेल कोई समस्या नहीं है। मैंने अपना संपादन अब पुनः सबमिट कर दिया है।
रयान

@ मैकल कोई चिंता नहीं! मुझे इसे किसी भी तरह "कमांड प्रतिस्थापन" कहने के लिए याद रखना चाहिए था। उत्तर में सुधार के लिए धन्यवाद!
रयान

3
अंडरस्कोर एक अजीब चरित्र है। यह ISO-8601 का उपयोग करना पसंद करता है $(date +%FT%T)जो कि देगा 2016-04-25T10:30:00
hschou
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.