2009-11-25 11 views
16

मैं एक फ़ाइल नाम ("somefile.txt") के बगल में दिनांक जोड़ना चाहता हूं। उदाहरण के लिए: somefile_25-11-2009.txt या somefile_25Nov2009.txt या उस प्रभाव के लिए कुछ भीलिनक्स में फ़ाइल नाम बदलने की तिथि

शायद एक स्क्रिप्ट टर्मिनल विंडो में कुछ आदेश या कुछ कमांड करेगा। मैं लिनक्स (उबंटू) का उपयोग कर रहा हूं।

अग्रिम धन्यवाद।

ओह मैं लगभग यह भूलना भूल गया कि स्क्रिप्ट या कमांड को फ़ाइल को किसी नए फ़ोल्डर में अद्यतन करना चाहिए, जब भी आप फ़ाइल को किसी विशिष्ट फ़ोल्डर में सहेजना चाहते हैं लेकिन फिर भी पिछली फाइलें रखना चाहते हैं। तो अंत में फ़ोल्डर में इस तरह की फाइलें होंगी: filename_18Oct2009.txt, filename_9Nov2009.txt, filename_23Nov2009.txt

+4

आप yyyy-MM-DD dd-mm-yyyy के बजाय भी करने के लिए फ़ाइल नाम lexicographical तरह पाने के लिए चाहते हो सकता है उन्हें क्रमिक रूप से क्रमबद्ध करें। – laalto

उत्तर

20

आप बैकटीक्स का उपयोग कर सकते हैं।

$ echo "myfilename-"`date +"%d-%m-%Y"` 

पैदावार:

myfilename-25-11-2009 
+0

यह फ़ाइल नाम की तारीख को जोड़ता है - उदाहरण में उदाहरण में * फ़ाइल नाम और एक्सटेंशन के बीच * तारीख को जाने की आवश्यकता है। –

+5

यह मेरे लिए काम करता है: 'echo test> "data-csv -" \ 'date +"% y-% m-% d "\' ".txt" ' –

+1

या:' echo test>" data-csv- " \ 'दिनांक +"% वाई-% एम-% d.txt "\' ' –

10
cp somefile somefile_`date +%d%b%Y` 
31

यहां दो समस्याओं है।

1. एक स्ट्रिंग

यह बहुत आसान है के रूप में तिथि प्राप्त करें। + विकल्प के साथ बस date कमांड का उपयोग करें। हम वैरिएबल में मान को कैप्चर करने के लिए बैकटिक्स का उपयोग कर सकते हैं।

$ DATE=`date +%d-%m-%y` 

आप अलग अलग % विकल्प के रूप में date man page पर विस्तृत का उपयोग करके दिनांक स्वरूप बदल सकते हैं।

2. फ़ाइल को नाम और एक्सटेंशन में विभाजित करें।

यह थोड़ा सा ट्रिकियर है। अगर हमें लगता है कि वे फ़ाइल नाम में केवल . होंगे, तो हम cut. के साथ डेलीमीटर के रूप में उपयोग कर सकते हैं।

$ NAME=`echo $FILE | cut -d. -f1 
$ EXT=`echo $FILE | cut -d. -f2` 

हालांकि, इस फ़ाइल नाम में एक से अधिक . साथ काम नहीं करेंगे। - जो आप शायद कर रहे हैं - हम bash उपयोग कर रहे हैं हम कुछ bash magic that allows us to match patterns when we do variable expansion उपयोग कर सकते हैं:

$ NAME=${FILE%.*} 
$ EXT=${FILE#*.} 

उन्हें एक साथ लाना हम पाते हैं:

$ FILE=somefile.txt    
$ NAME=${FILE%.*} 
$ EXT=${FILE#*.} 
$ DATE=`date +%d-%m-%y`   
$ NEWFILE=${NAME}_${DATE}.${EXT} 
$ echo $NEWFILE     
somefile_25-11-09.txt       

और यदि हम पठनीयता के बारे में कम चिंतित हैं हम सभी करते हैं एक लाइन पर काम (एक भिन्न दिनांक प्रारूप के साथ):

$ FILE=somefile.txt 
$ FILE=${FILE%.*}_`date +%d%b%y`.${FILE#*.} 
$ echo $FILE         
somefile_25Nov09.txt 
+0

धन्यवाद डेव लेकिन मैं इस स्क्रिप्ट को कैसे या कहां चला सकता हूं? मुझे माफ़ कर दो मैं लिनक्स के साथ नया हूँ। – sami

+0

क्या आप ठीक से कुछ और विवरण दे सकते हैं जो आप करना चाहते हैं। तो आपके पास एक निर्देशिका में एक फ़ाइल है जिसे आप इस तरह से स्टाम्प डेट करना चाहते हैं। क्या यह हर बार एक ही नाम वाला एक फ़ाइल है या कई अलग-अलग नामों के साथ कई फाइलें हो सकती हैं? –

+1

मैंने अपना प्रश्न शीर्ष पर संपादित किया है, कृपया इसे देखें। – sami

0

में थोड़ा और अधिक जटिल समाधान है कि पूरी तरह से अपने कल्पना से मेल खाता है

echo `expr $FILENAME : '\(.*\)\.[^.]*'`_`date +%d-%m-%y`.`expr $FILENAME : '.*\.\([^.]*\)'` 

जहां पहले 'expr' विस्तार के बिना अर्क फ़ाइल नाम, दूसरा 'expr' अर्क विस्तार

संबंधित मुद्दे