2014-06-05 19 views
25

Tôi có bó của tập tin đang ngồi trong thư mục nhưRecursive mèo tất cả các tập tin vào tập tin duy nhất

data\A\A\A\json1.json 
data\A\A\A\json2.json 
data\A\A\B\json1.json 
... 
data\Z\Z\Z\json_x.json 

Tôi muốn tất cả các con mèo jsons thành một file duy nhất?

+4

Kết quả sẽ không có giá trị JSON, bạn có chắc bạn muốn làm điều này? – Barmar

Trả lời

49
find data/ -name '*.json' -exec cat {} \; > uber.json 

giải thích ngắn gọn:

find <where> \ 
    -name <file_name_pattern> \ 
    -exec <run_cmd_on_every_hit> {} \; \ 
    > <where_to_store> 
+1

Không sử dụng tìm kiếm: 'cat ./data/*/*/*/*.json>./All.json' –

+0

Hoặc trong' bash' 4 với 'shopt -s globstar',' cat ./data/**/*. json'. – chepner

+0

Bạn cũng nên thêm "-type f" (chỉ các tệp) để tránh lỗi khi mèo cố in thư mục. –

9

Sử dụng find để có được tất cả các file JSON và nối chúng.

find data -name '*.json' -exec cat {} + > all.json 

Lưu ý rằng đây sẽ không phải là JSON hợp lệ. Nếu bạn muốn một tệp JSON chứa nhiều đối tượng, chúng cần phải nằm trong một mảng hoặc đối tượng có chứa, vì vậy bạn cần phải thêm [ ] xung quanh chúng và đặt , giữa mỗi đối tượng.

+2

Tôi cũng sẽ thêm tham số '-type f' vào lệnh' find'. – palacsint

+2

Đúng là đúng, nhưng sẽ khá sai khi có thư mục có phần mở rộng '.json'. – Barmar

+0

Làm thế nào để bạn thêm các ký tự ',' trong lệnh ở trên giữa mỗi tệp? –

8

Ngoài ra - nếu bạn có một danh sách các tập tin của bạn - bạn có thể đường ống đó để xargs

<path to your files> | xargs cat > all.json 
+2

cuối cùng để lấy danh sách đệ quy: tìm \' pwd \ ' – Alan

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