2011-01-28 10 views
9

का उपयोग कर किसी निर्देशिका में सभी फ़ाइलों को मर्ज करें मेरे पास कई * .js फ़ाइलों वाली निर्देशिका है। मात्रा और फ़ाइल नाम अज्ञात हैं। कुछ इस तरह:बैश

js/ 
|- 1.js 
|- 2.js 
|- blabla.js 

मैं एक merged_dmYHis.js में इस निर्देशिका में सभी फ़ाइलों को मर्ज करने के लिए की जरूरत है। उदाहरण के लिए, यदि फ़ाइलें सामग्री हैं:

1.js

aaa 
bbb 

2.js

ccc 
ddd 
eee 

blabla.js

fff 

merged_280120111257.js होते हैं:

aaa 
bbb 
ccc 
ddd 
eee 
fff 

वहाँ बैश का उपयोग कर यह करने के लिए एक रास्ता है, या इस तरह के काम के लिए अजगर या इसी तरह की तरह उच्च स्तर प्रोग्रामिंग भाषा की आवश्यकता है?

उत्तर

33
cat 1.js 2.js blabla.js > merged_280120111257.js 

सामान्य समाधान होगा:

cat *.js > merged_`date +%d%m%Y%H%M`.js 
बस ब्याज से बाहर

- आपको लगता है यह एक अच्छा विचार DDMMYYYYHHMM साथ फ़ाइलों को नाम देने है? फ़ाइलों को क्रमिक रूप से (खोल के भीतर) सॉर्ट करना मुश्किल हो सकता है। YYYYMMDDHHMM पैटर्न के बारे में कैसे?

cat *.js > merged_`date +%Y%m%d%H%M`.js 
+0

बहुत बहुत धन्यवाद, मुझे नहीं लगता कि उत्तर इतना आसान है। किस क्रम में 'बिल्ली' फाइलों को मर्ज करें? –

+0

@ सिल्वरलाइट - उसी क्रम में आप उन्हें देते हैं। '* .js' के रूप में (' ls * .js' में) उन्हें वर्णमाला क्रम में लौटाता है, इसलिए उन्हें 'cat * .js' के साथ संयोजित किया जाएगा। – eumiro

-1

साथ ही आप भेजे फ़ाइलें क्रमबद्ध कर सकते हैं, तो डिफ़ॉल्ट वर्णमाला के क्रम है, लेकिन इस उदाहरण फ़ाइल संशोधन टाइमस्टैम्प द्वारा नवीनतम करने के लिए सबसे पुराना से माध्यम से चला जाता:

cat `ls -tr *.js` > merged_`date +%Y%m%d%H%M`.js 

इस उदाहरण बिल्ली लेता में ls कमांड से फ़ाइलों की सूची, और टाइमस्टैम्प द्वारा-प्रकार, और -r डिफ़ॉल्ट क्रम को उलट देता है।