डेटामैम्प स्ट्रिंग को लगातार तारीख स्वरूप% Y% m% d के साथ जोड़कर


5

मुझे लॉग फाइल बनाने की आवश्यकता है जो अनिवार्य रूप से प्रीफिक्स yp_और प्रत्यय के साथ स्टैम्प की तारीख है .log, और एक दिन की संख्या में हेरफेर है:

$ touch yp_$(echo "$(date +%Y%m%d)-10" | /usr/bin/bc -l).log
$ ls
yp_20150912.log   # ... ok for today's date.

आज के लिए यह ठीक है, लेकिन दिन की संख्या 01 और 10 के बीच होने पर सभी नरक ढीले हो जाते हैं। परिणाम की व्याख्या किसी तिथि के रूप में नहीं की जा सकती है।

जैसे कि बस कल्पना कीजिए कि वह दिन 8 मार्च, 2016, यानी '20160308' है। मैं यह सुनिश्चित करने के लिए उपरोक्त कैसे कोड कर सकता हूं कि 10 दिन घटाकर '20150298' नहीं बल्कि '20150227' का उत्पादन होगा ? इसके अलावा 19820103 के साथ उत्तर का परीक्षण करें ...

- मैंने देखा man date

- apropos date161 हिट्स आउट किए हैं, जिनकी मैंने समीक्षा भी की है।

क्या कोई उस वन-लाइनर की मदद कर सकता है?


GNU date, ब्याज से बाहर?
बर्टिबेब

@बर्टीब: यूप, जीएनयू तारीख है। मेरा पहला उदाहरण एक लीप-ईयर है!
Cbhihe

वेल्ड, GNU dateबचाव के लिए तो :)
bertieb

जवाबों:


6

मुझे तारीखों में हेरफेर करने की जरूरत है (लीप वर्षों पर ध्यान देते हुए)

सौभाग्य से, GNU dateएक बहुत ही आसान -d विकल्प है:

-d, --date=STRING
          display time described by STRING, not 'now'

(से man date)

यह मनमाना तिथि विवरण स्वीकार करता है, जैसे "अब + 1 वर्ष" "28 जनवरी + 3 सप्ताह"; या आपके मामले में: "अब - 10 दिन":

touch yp_$(date -d 'now - 10 days' +%Y%m%d).log

गन्दा आह्वान की कोई आवश्यकता नहीं bc, लीप इयर्स की कोई चिंता नहीं- जीएनयू dateइसे संभालेगा।


1
सही पर। यह वही है जो मेरे मन में था और मैंने उस विकल्प को मैन पेज पर देखा था, लेकिन इसके उपयोग को नहीं समझा था। धन्यवाद - PS: BTW "बारिश और पीने की भूमि" बहुत सारे स्थान हो सकते हैं ... मेरे उत्तर में कोई भी जगह, वास्तव में। :))
Cbhihe

@Chehehe Glad यह आपके लिए काम करता है- यह जानने के लिए एक अविश्वसनीय रूप से उपयोगी चीज है (और एक विशेषता जो मुझे याद आती है जब अन्य भाषाओं में उपलब्ध नहीं है) :) PS लगभग 55 ° N, और बारिश की तुलना में अधिक दिनों पर - आप क्या करते हैं इच्छाशक्ति;)
बर्टिबेब

6

आज से एक्स-दिनों के लिए एक प्रारूपित तिथि प्रदर्शित करने के लिए:

$ echo $(date +%Y%m%d)
20150922

$ echo $(date -d -10days +%Y%m%d)
20150912

$ echo $(date -d +10days +%Y%m%d)
20151002

2
मुझे आपके उत्तर की सहमति पसंद है और उत्तर सही है। लेकिन यह @bertieb के स्वयं के बाद आया, जो समान रूप से सही है। इसलिए मैं केवल तुम्हें उभार सकता हूं। टीएक्स स्टीवन और उसके लिए खेद है।
Cbhihe
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.