2011-01-28 37 views
9

Tôi có một thư mục có nhiều tệp * .js. Số lượng và tên tệp không xác định. Một cái gì đó như thế này:Hợp nhất tất cả các tệp trong một thư mục thành một tệp bằng bash

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

Tôi cần hợp nhất tất cả các tệp trong thư mục này thành một merged_dmYHis.js. Ví dụ, nếu nội dung file là:

1.js

aaa 
bbb 

2.js

ccc 
ddd 
eee 

blabla.js

fff 

Các merged_280120111257.js sẽ chứa:

aaa 
bbb 
ccc 
ddd 
eee 
fff 

Có cách nào để làm điều đó bằng bash, hoặc công việc như vậy đòi hỏi ngôn ngữ lập trình cấp cao hơn, như trăn hay tương tự?

Trả lời

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

giải pháp chung sẽ là:

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

Chỉ cần ra khỏi sự quan tâm - bạn có nghĩ rằng đó là một ý tưởng tốt để đặt tên cho các tập tin với DDMMYYYYHHMM? Nó có thể khó khăn để sắp xếp các tập tin theo thứ tự thời gian (trong vỏ). Làm thế nào về mô hình YYYYMMDDHHMM?

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

Cảm ơn bạn rất nhiều, tôi không nghĩ câu trả lời đơn giản như vậy. Theo thứ tự 'cat' hợp nhất các tập tin? –

+0

@SilverLight - theo thứ tự bạn cung cấp cho chúng. Vì '* .js' (trong' ls * .js') trả về chúng theo thứ tự bảng chữ cái, vì vậy chúng sẽ được nối với 'cat * .js'. – eumiro

-1

Bạn có thể sắp xếp các tập tin đến là tốt, mặc định là thứ tự chữ cái, nhưng ví dụ này đi qua từ cũ nhất đến mới nhất bởi dấu thời gian sửa đổi tập tin:

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

Trong ví dụ này mèo mất danh sách các tệp từ lệnh ls và -t sắp xếp theo dấu thời gian và -r đảo ngược thứ tự mặc định.

Các vấn đề liên quan