Apakah ada cara mudah untuk mengkonversi output dari perintah * nix "tree" ke format JSON?
Sunting: Saya pikir saya tidak menggambarkan masalah saya dengan cukup baik. Tujuan saya adalah mengonversi sesuatu seperti:
.
|-- dir1
| |-- dirA
| | |-- dirAA
| | `-- dirBB
| `-- dirB
`-- dir2
|-- dirA
`-- dirB
ke:
{"dir1" : [{"dirA":["dirAA", "dirAB"]}, "dirB"], "dir2": ["dirA", "dirB"]}
text-processing
tree
json
roundrobin
sumber
sumber
dir1/dirA
memiliki subdirektori?{"dir1" : [{"dirA":["dirAA", "dirAB"]}, "dirB"], "dir2": ["dirA", "dirB"]}
tree
perintah bukanlah alat yang tepat. Saya mungkin cenderung melakukanls -R
ataufind
sebaliknya.Jawaban:
Percobaan 1
Sebuah solusi menggunakan hanya perl, mengembalikan hash struktur hash sederhana. Sebelum OP mengklarifikasi format data JSON.
File::Find
modul bekerja dengan cara yang mirip denganfind
perintah unix . TheJSON
Modul mengambil variabel perl dan bertobat mereka ke JSON.Akan mengulangi struktur file dari direktori kerja sekarang memanggil subrutin
process_dir
untuk setiap file / direktori di bawah ".", Danno_chdir
kirim perl untuk tidak mengeluarkanchdir()
untuk setiap direktori yang ditemukannya.process_dir
kembali jika file yang diperiksa bukan direktori:Kami kemudian mengambil referensi dari hash yang ada
%$dirs
ke dalam$ref
, membagi jalur file di sekitar/
dan loop denganfor
menambahkan kunci hash baru untuk setiap jalur.Membuat struktur direktori seperti slm lakukan:
Outputnya adalah:
Percobaan 2
Oke sekarang dengan struktur data yang berbeda ...
Dan kemudian menjalankan skrip pada struktur direktori yang diusulkan ...
Saya menemukan ini sangat sulit untuk mendapatkan yang benar (terutama mengingat "hash if sub directories, array if not, OH UNLESS top level, maka hash anyway" logika). Jadi saya akan terkejut jika ini adalah sesuatu yang dapat Anda lakukan dengan
sed
/awk
... tapi kemudian Stephane belum melihat ini, saya yakin :)sumber
Versi 1.7 termasuk dukungan untuk JSON:
http://mama.indstate.edu/users/ice/tree/changes.html
Per
man
halaman (di bawahXML/JSON/HTML OPTIONS
):misalnya
sumber
Berikut adalah salah satu cara menggunakan Perl dan modul perl JSON.
Contoh
Buat beberapa data sampel.
Begini tampilannya:
Berikut ini adalah menjalankan menggunakan perintah Perl:
Yang mengembalikan hasil ini:
CATATAN: Ini hanya enkapsulasi dari output dari
tree
. Bukan hierarki bersarang. OP mengubah pertanyaan setelah saya menyarankan ini!sumber
Saya juga mencari cara untuk mengeluarkan folder linux / pohon file ke beberapa file JSON atau XML. Mengapa tidak menggunakan perintah terminal sederhana ini:
Jadi, cukup
tree
perintah Linux , dan konfigurasikan parameter Anda sendiri. Di sini-X
memberikan output XML. Bagi saya, tidak apa-apa, dan saya kira ada beberapa skrip untuk mengkonversi XML ke JSON.sumber
Anda dapat mencoba perintah ini:
Ganti nama file dengan nama file output yang Anda inginkan.
sumber
J
untuk perintahtree
!!Ini berhasil. https://gist.github.com/debodirno/18a21df0511775c19de8d7ccbc99cb72
sumber