Saya mencoba untuk mendapatkan daftar nama-nama semua file yang ada di direktori menggunakan Node.js. Saya ingin output yang merupakan array dari nama file. Bagaimana saya bisa melakukan ini?
javascript
node.js
directory-listing
resopollution
sumber
sumber
fs.readdir
berfungsi, tetapi tidak bisa menggunakan nama file seperti pola globls /tmp/*core*
. Lihat github.com/isaacs/node-glob . Glob bahkan dapat mencari di sub-direktori.readdir-recursive
modul NPM jika Anda mencari nama file di subdirektori jugaJawaban:
Anda dapat menggunakan metode
fs.readdir
ataufs.readdirSync
.fs.readdir
fs.readdirSync
Perbedaan antara kedua metode, adalah bahwa yang pertama asinkron, jadi Anda harus menyediakan fungsi panggilan balik yang akan dieksekusi ketika proses membaca berakhir.
Yang kedua adalah sinkron, itu akan mengembalikan array nama file, tetapi akan menghentikan eksekusi lebih lanjut dari kode Anda sampai proses membaca berakhir.
sumber
readdir
juga menunjukkan nama direktori . Untuk memfilter ini, gunakanfs.stat(path, callback(err, stats))
danstats.isDirectory()
.ls
? Tunggu saja sampai ada orang yang membuat beberapa nama file dengan spasi dan baris baru ...IMO cara paling mudah untuk melakukan tugas-tugas tersebut adalah dengan menggunakan alat glob . Berikut adalah paket glob untuk node.js. Instal dengan
Kemudian gunakan wild card untuk mencocokkan nama file (contoh diambil dari situs web paket)
sumber
cwd
objek pilihan.glob
luar itu sendiri? Misalnya. Saya inginconsole.log
hasil, tetapi tidak di dalamglob()
?glob.sync(pattern, [options])
Metode ini mungkin lebih mudah digunakan karena hanya mengembalikan array nama file, daripada menggunakan panggilan balik. Info lebih lanjut di sini: github.com/isaacs/node-globJawaban di atas tidak melakukan pencarian rekursif ke direktori. Inilah yang saya lakukan untuk pencarian rekursif (menggunakan simpul-jalan :
npm install walk
)sumber
.git
Dapatkan file di semua subdir
sumber
if (typeof files_ === 'undefined') files_=[];
? Anda hanya perlu melakukanvar files_ = files_ || [];
alih - alihfiles_ = files_ || [];
.var fs = require('fs');
di awalgetFiles
.Inilah solusi sederhana dengan hanya menggunakan modul asli
fs
danpath
:atau versi async (
fs.readdir
sebagai gantinya):Maka Anda cukup memanggil (untuk versi sinkronisasi):
atau versi async:
Perbedaannya terletak pada bagaimana node memblok saat melakukan IO. Mengingat bahwa API di atas sama, Anda bisa menggunakan versi async untuk memastikan kinerja maksimum.
Namun ada satu keuntungan menggunakan versi sinkron. Lebih mudah untuk mengeksekusi beberapa kode segera setelah perjalanan selesai, seperti pada pernyataan berikutnya setelah berjalan. Dengan versi async, Anda perlu cara ekstra untuk mengetahui kapan Anda selesai. Mungkin membuat peta dari semua jalur terlebih dahulu, lalu menghitungnya. Untuk skrip build / util sederhana (vs server web berkinerja tinggi) Anda dapat menggunakan versi sinkronisasi tanpa menyebabkan kerusakan.
sumber
walkSync
dariwalk(filePath, callback);
kewalkSync(filePath, callback);
Pada Node v10.10.0, dimungkinkan untuk menggunakan
withFileTypes
opsi baru untukfs.readdir
danfs.readdirSync
dalam kombinasi dengandirent.isDirectory()
fungsi untuk memfilter nama file dalam direktori. Itu terlihat seperti ini:Array yang dikembalikan dalam bentuk:
Documents untuk fs.Dirent class
sumber
Menggunakan Janji dengan ES7
Penggunaan asinkron dengan mz / fs
The
mz
modul menyediakan versi promisified perpustakaan inti simpul. Menggunakannya sederhana. Pertama instal perpustakaan ...Kemudian...
Atau Anda dapat menuliskannya dalam fungsi asinkron di ES7:
Perbarui untuk daftar rekursif
Beberapa pengguna telah menetapkan keinginan untuk melihat daftar rekursif (meskipun tidak dalam pertanyaan) ... Gunakan
fs-promise
. Ini pembungkus tipis di sekitarmz
.kemudian...
sumber
Ketergantungan.
Definisi.
Pemakaian.
Harap dicatat bahwa
fileList
itu terlalu optimis. Untuk hal yang serius, tambahkan beberapa penanganan kesalahan.sumber
excludeDirs
argumen array juga. Itu cukup mengubahnya sehingga mungkin Anda harus mengeditnya (jika Anda menginginkannya). Kalau tidak, saya akan menambahkannya dalam jawaban yang berbeda. gist.github.com/AlecTaylor/f3f221b4fb86b4375650versi non-rekursif
Anda tidak mengatakan Anda ingin melakukannya secara rekursif jadi saya menganggap Anda hanya perlu anak langsung dari direktori.
Kode sampel:
sumber
Memuat
fs
:Baca file async :
Baca sinkronisasi file :
sumber
jika seseorang masih mencari ini, saya melakukan ini:
dan kerjanya sangat bagus untuk saya
sumber
[...files, ...getAllFiles(name)]
atau[...files, name]
. Sedikit penjelasan akan sangat membantu :)...
digunakan di sini disebut sintaks spread. Apa yang pada dasarnya dilakukannya adalah mengambil semua objek di dalam array dan 'menyebar' ke dalam array baru. Dalam hal ini, semua entri di dalamfiles
array ditambahkan ke pengembalian bersama dengan semua nilai yang dikembalikan dari panggilan rekursif. Anda dapat merujuk ke sintaksis penyebaran di sini: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Dapatkan
sorted
nama file. Anda dapat memfilter hasil berdasarkan spesifikextension
seperti'.txt'
,'.jpg'
dan sebagainya.sumber
Saya berasumsi dari pertanyaan Anda bahwa Anda tidak ingin nama direktori, hanya file.
Contoh:
Jika Anda hanya menginginkan larik jalur file gunakan
return_object: false
:pengembalian:
Kredit pergi ke https://gist.github.com/lovasoa/8691344#gistcomment-2927279
sumber
Berikut adalah versi rekursif asinkron.
sumber
Mengambil pendekatan umum @ Hunan-Rostomyan, membuatnya sedikit lebih ringkas dan menambahkan
excludeDirs
argumen. Akan sepele untuk memperpanjang denganincludeDirs
, cukup ikuti pola yang sama:Contoh penggunaan:
sumber
Keluar dari kotak
Jika Anda ingin objek dengan struktur direktori out-of-the-box saya sangat merekomendasikan Anda untuk memeriksa direktori-pohon .
Katakanlah Anda memiliki struktur ini:
Akan kembali:
Objek Khusus
Kalau tidak, jika Anda ingin membuat objek pohon direktori dengan pengaturan khusus Anda lihat potongan berikut. Contoh langsung dapat dilihat di kode dan kotak ini .
Maka Anda cukup melakukan:
sumber
Ini adalah TypeScript, opsional rekursif, opsional logging kesalahan dan solusi asinkron. Anda dapat menentukan ekspresi reguler untuk nama file yang ingin Anda temukan.
Saya menggunakan
fs-extra
, karena perbaikan set super mudahfs
.sumber
Ini akan bekerja dan menyimpan hasilnya dalam file test.txt yang akan hadir di direktori yang sama
sumber
Saya baru-baru ini membangun alat untuk ini yang melakukan ini ... Ini mengambil direktori secara tidak sinkron dan mengembalikan daftar item. Anda bisa mendapatkan direktori, file, atau keduanya, dengan folder yang lebih dulu. Anda juga dapat membuat paginasi data jika Anda tidak ingin mengambil seluruh folder.
https://www.npmjs.com/package/fs-browser
Ini tautannya, semoga membantu seseorang!
sumber
Hanya kepala: jika Anda berencana untuk melakukan operasi pada setiap file dalam direktori, coba vinyl-fs (yang digunakan oleh tegukan , sistem pembangunan streaming).
sumber
Saya membuat modul simpul untuk mengotomatisasi tugas ini: mddir
Pemakaian
simpul mddir "../relative/path/"
Untuk menginstal: npm install mddir -g
Untuk menghasilkan penurunan harga untuk direktori saat ini: mddir
Untuk menghasilkan untuk setiap jalur absolut: mddir / absolute / path
Untuk menghasilkan jalur relatif: mddir ~ / Documents / whatever.
File md dihasilkan di direktori kerja Anda.
Saat ini mengabaikan node_modules, dan folder .git.
Penyelesaian masalah
Jika Anda menerima kesalahan 'simpul \ r: Tidak ada file atau direktori', masalahnya adalah bahwa sistem operasi Anda menggunakan akhiran baris yang berbeda dan mddir tidak dapat menguraikannya tanpa Anda secara eksplisit mengatur gaya akhiran baris ke Unix. Ini biasanya mempengaruhi Windows, tetapi juga beberapa versi Linux. Pengaturan akhir baris ke gaya Unix harus dilakukan dalam folder bin global mddir npm.
Memperbaiki ujung garis
Dapatkan jalur folder npm bin dengan:
npm config get prefix
Cd ke folder itu
buat instalasi dos2unix
dos2unix lib / node_modules / mddir / src / mddir.js
Ini mengubah akhiran baris menjadi Unix dan bukan Dos
Kemudian jalankan seperti biasa dengan: node mddir "../relative/path/".
Contoh menghasilkan struktur file penurunan direktori 'directoryList.md'
sumber
Gunakan modul
npm
daftar-isi . Itu membaca isi dan sub-isi dari direktori yang diberikan dan mengembalikan daftar path file dan folder.sumber
sumber