Я пытаюсь получить список имен всех файлов, присутствующих в каталоге, используя Node.js. Я хочу вывод, который является массивом имен файлов. Как я могу это сделать?
javascript
node.js
directory-listing
resopollution
источник
источник
fs.readdir
работает, но не может использовать такие шаблоны имен файлов, какls /tmp/*core*
. Проверьте github.com/isaacs/node-glob . Глобусы могут даже искать в подкаталогах.readdir-recursive
модуль NPM, хотя, если вы ищете имена файлов в подкаталогах, такжеОтветы:
Вы можете использовать методы
fs.readdir
илиfs.readdirSync
.fs.readdir
fs.readdirSync
Разница между этими двумя методами заключается в том, что первый метод является асинхронным, поэтому вы должны предоставить функцию обратного вызова, которая будет выполняться после завершения процесса чтения.
Второй является синхронным, он вернет массив имен файлов, но остановит дальнейшее выполнение вашего кода до завершения процесса чтения.
источник
readdir
также показывает имена каталогов . Чтобы отфильтровать их, используйтеfs.stat(path, callback(err, stats))
иstats.isDirectory()
.ls
? Просто подождите, пока кто-нибудь не создаст имена файлов со встроенными пробелами и переводами строки ...IMO самый удобный способ сделать такие задачи - использовать инструмент glob . Вот глобальный пакет для node.js. Установить с
Затем используйте подстановочный знак для сопоставления имен файлов (пример взят с сайта пакета)
источник
cwd
в объекте параметров.glob
вне себя? Например. Я хочуconsole.log
результатов, но не внутриglob()
?glob.sync(pattern, [options])
метод может быть проще в использовании, поскольку он просто возвращает массив имен файлов, а не использует обратный вызов. Более подробная информация здесь: github.com/isaacs/node-globОтвет выше не выполняет рекурсивный поиск в каталоге. Вот что я сделал для рекурсивного поиска ( с помощью узла-гуляет :
npm install walk
)источник
.git
Получить файлы во всех подкаталогах
источник
if (typeof files_ === 'undefined') files_=[];
? вам нужно только сделатьvar files_ = files_ || [];
вместоfiles_ = files_ || [];
.var fs = require('fs');
в началеgetFiles
.Вот простое решение с использованием только нативного модуля
fs
иpath
модулей:или асинхронная версия (используется
fs.readdir
вместо):Тогда вы просто звоните (для синхронизации версии):
или асинхронная версия:
Разница в том, как блокирует узлы при выполнении ввода-вывода. Учитывая, что API выше, то же самое, вы можете просто использовать асинхронную версию, чтобы обеспечить максимальную производительность.
Однако есть одно преимущество использования синхронной версии. Некоторый код легче выполнить, как только завершится обход, как в следующем операторе после обхода. В асинхронной версии вам понадобится дополнительный способ узнать, когда вы закончите. Возможно, сначала создайте карту всех путей, а затем перечислите их. Для простых сценариев сборки / утилит (против высокопроизводительных веб-серверов) вы можете использовать синхронизирующую версию без какого-либо ущерба.
источник
walkSync
сwalk(filePath, callback);
кwalkSync(filePath, callback);
Начиная с Node v10.10.0, можно использовать новую
withFileTypes
опцию дляfs.readdir
иfs.readdirSync
в сочетании сdirent.isDirectory()
функцией для фильтрации имен файлов в каталоге. Это выглядит так:Возвращенный массив имеет вид:
Документы для класса fs.Dirent
источник
Использование обещаний с ES7
Асинхронное использование с mz / fs
mz
Модуль обеспечивает promisified версии библиотеки ядра узла. Использовать их просто. Сначала установите библиотеку ...Затем...
В качестве альтернативы вы можете написать их в асинхронных функциях в ES7:
Обновление для рекурсивного листинга
Некоторые пользователи указали желание увидеть рекурсивный список (хотя и не в вопросе) ... Использовать
fs-promise
. Это тонкая обертка вокругmz
.тогда...
источник
Зависимости.
Определение.
Применение.
Обратите внимание, что
fileList
это слишком оптимистично. Для чего-то серьезного, добавьте обработку ошибок.источник
excludeDirs
аргумент массива. Это меняет его настолько, что, возможно, вы должны отредактировать его (если хотите). В противном случае я добавлю это в другом ответе. gist.github.com/AlecTaylor/f3f221b4fb86b4375650нерекурсивная версия
Вы не говорите, что хотите сделать это рекурсивно, поэтому я предполагаю, что вам нужны только прямые дочерние элементы каталога.
Образец кода:
источник
Загрузить
fs
:Чтение файлов асинхронно :
Синхронизация файлов чтения :
источник
если кто-то все еще ищет это, я делаю это:
и его работа очень хорошо для меня
источник
[...files, ...getAllFiles(name)]
или[...files, name]
работает. Небольшое объяснение было бы очень полезно :)...
Используемый здесь называется синтаксис распространения. По сути, он берет все объекты внутри массива и «распространяет» его в новый массив. В этом случае все записи вfiles
массиве добавляются в возвращаемое значение вместе со всеми значениями, возвращаемыми из рекурсивного вызова. Вы можете обратиться к синтаксису распространения здесь: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Получить
sorted
имена файлов. Вы можете отфильтровать результаты по конкретному,extension
например'.txt'
,'.jpg'
и так далее.источник
Из вашего вопроса я предполагаю, что вам не нужны имена каталогов, только файлы.
Пример:
Если вы хотите просто массив путей к файлам, используйте
return_object: false
:возвращает:
Кредиты перейти на https://gist.github.com/lovasoa/8691344#gistcomment-2927279
источник
Вот асинхронная рекурсивная версия.
источник
Взял общий подход @ Унаня-Ростомяна, сделал его немного более сжатым и добавил
excludeDirs
аргумент. Это было бы тривиальноincludeDirs
, просто следуйте той же схеме:Пример использования:
источник
Из коробки
В случае, если вам нужен объект со структурой каталогов из коробки, я настоятельно рекомендую вам проверить дерево каталогов .
Допустим, у вас есть эта структура:
Вернусь:
Пользовательский объект
В противном случае, если вы хотите создать объект дерева каталогов с вашими пользовательскими настройками , взгляните на следующий фрагмент. Живой пример виден на этом коде .
Тогда вы можете просто сделать:
источник
Это TypeScript, опционально рекурсивный, опционально протоколирование ошибок и асинхронное решение. Вы можете указать регулярное выражение для имен файлов, которые вы хотите найти.
Я использовал
fs-extra
, потому что это легкий супер набор улучшенийfs
.источник
Это сработает и сохранит результат в файле test.txt, который будет находиться в том же каталоге
источник
Я недавно создал для этого инструмент, который делает именно это ... Он выбирает каталог асинхронно и возвращает список элементов. Вы можете получить каталоги, файлы или и то и другое, причем папки будут первыми. Вы также можете разбивать данные на страницы, если вы не хотите извлекать всю папку.
https://www.npmjs.com/package/fs-browser
Это ссылка, надеюсь, она кому-нибудь поможет!
источник
Просто наперед: если вы планируете выполнять операции с каждым файлом в каталоге, попробуйте винил-fs (который используется gulp , системой потоковой сборки).
источник
Я сделал модуль узла для автоматизации этой задачи: mddir
Применение
узел mddir "../relative/path/"
Для установки: npm установите mddir -g
Чтобы создать уценку для текущего каталога: mddir
Генерировать для любого абсолютного пути: mddir / absolute / path
Чтобы сгенерировать относительный путь: mddir ~ / Documents / what.
MD-файл генерируется в вашем рабочем каталоге.
В настоящее время игнорирует node_modules и папки .git.
Поиск проблемы
Если вы получаете сообщение об ошибке «узел \ r: нет такого файла или каталога», проблема заключается в том, что ваша операционная система использует разные окончания строк, и mddir не сможет их проанализировать без явного задания стиля окончания строк в Unix. Обычно это влияет на Windows, но также и на некоторые версии Linux. Установка конца строки в стиле Unix должна выполняться в глобальной папке bin mddir npm.
Исправление концов строки
Получить путь к папке npm bin с помощью:
npm config get prefix
Компакт-диск в эту папку
заварить установить dos2unix
dos2unix lib / node_modules / mddir / src / mddir.js
Это преобразует окончания строк в Unix вместо Dos
Затем запустите как обычно с: node mddir "../relative/path/".
Пример сгенерированной структуры файла уценки 'directoryList.md'
источник
Используйте модуль
npm
списка содержимого . Он читает содержимое и под-содержимое данного каталога и возвращает список путей к файлам и папкам.источник
источник