Есть более простой способ , чтобы скопировать папку и все ее содержимое , не вручную делать последовательность fs.readir
, fs.readfile
,fs.writefile
рекурсивно?
Просто интересно, если я пропускаю функцию, которая в идеале будет работать, как это
fs.copy("/path/to/source/folder","/path/to/destination/folder");
javascript
node.js
lostsource
источник
источник
Ответы:
Вы можете использовать модуль ncp . Я думаю это то что тебе нужно
источник
npm install ncp
и работает менее чем за 30 лет. Спасибо.Это мой подход к решению этой проблемы без каких-либо дополнительных модулей. Просто с помощью встроенных
fs
иpath
модулей.Примечание. При этом используются функции чтения / записи fs, поэтому он не копирует метаданные (время создания и т. Д.). Начиная с узла 8.5,
copyFileSync
доступны функции, которые вызывают функции копирования ОС и, следовательно, также копируют метаданные. Я еще не тестировал их, но это должно сработать, чтобы просто заменить их. (См. Https://nodejs.org/api/fs.html#fs_fs_copyfilesync_src_dest_flags )источник
javascript var fs = require('fs'); var path = require('path');
fs.copy
или,fs.copySync
поскольку они фактически вызывают функции копирования на уровне ОС в MacOS и Windows, и, таким образом, фактически копировать файлы.fs.copyFile
если вы покопаетесь в исходном узле, который вы увидите на Mac и Windows, они вызовут специальную функцию ОС для копирования файлаЕсть несколько модулей, которые поддерживают копирование папок с их содержимым. Самым популярным был бы гаечный ключ
Альтернативой будет узел-фс-экстра
источник
wrench
это устарело и должно быть заменено наnode-fs-extra
( github.com/jprichardson/node-fs-extra )Вот функция, которая рекурсивно копирует каталог и его содержимое в другой каталог:
источник
fs.lstatSync
fs.statSync
linking
не копирует .. Проблема в том, что когда вы изменяете содержимое связанного файла, оригинальный файл тоже меняется.fs-extra
у меня сработало когдаncp
иwrench
не получилосьhttps://www.npmjs.com/package/fs-extra
источник
wrench
направляет пользователей использовать,fs-extra
поскольку он устарел в своей библиотеке.Для ОС Linux / Unix вы можете использовать синтаксис оболочки
Это оно!
источник
Модуль FS-Extra работает как шарм.
Установить фс-экстра
Ниже приведена программа для копирования исходного каталога в целевой каталог.
Ссылки
fs-extra: https://www.npmjs.com/package/fs-extra
Пример: учебник по NodeJS - копирование папки Node.js
источник
Вот как я бы сделал это лично:
работает для папок и файлов
источник
Я создал небольшой рабочий пример, который копирует исходную папку в другую папку назначения всего за несколько шагов (на основе ответа @ shift66 с использованием ncp):
Шаг 1 - Установите модуль ncp:
Шаг 2 - создайте copy.js (измените srcPath и destPath в соответствии с вашими потребностями):
шаг 3 - беги
источник
Это довольно легко с узлом 10.
Это предполагает,
dest
что не существует.источник
require('util').promisify
сfs.mkdir
иfs.copyFile
вместоrequire('fs').promises
, который все еще экспериментален в v11.1.withFileTypes
опция? Потому что это спасает вас отstat
звонкаwithFileTypes
опции.Я знаю так много ответов уже здесь, но никто не ответил на это простым способом. Что касается официальной документации fs-exra , вы можете сделать это очень легко
источник
{ recursive: true }
из упомянутого вами github doc , не знаю, работает ли он.Поскольку я просто создаю простой скрипт для узла, я не хотел, чтобы пользователям скрипта приходилось импортировать кучу внешних модулей и зависимостей, поэтому я остановился на мысли и выполнил поиск запущенных команд из bash. оболочка.
Этот фрагмент кода node.js рекурсивно копирует папку с именем node-webkit.app в папку под названием build:
Спасибо Лэнсу Полларду из dzone за то, что я начал.
Приведенный выше фрагмент кода ограничен платформами на основе Unix, такими как Mac OS и Linux, но подобный метод может работать для Windows.
источник
@ mallikarjun-м спасибо!
fs-extra сделал это, и он может даже вернуть Promise, если вы не предоставите обратный вызов! :)
источник
Тот, кто поддерживает символическую ссылку +, не генерирует, если каталог существует.
источник
Этот код будет работать нормально, рекурсивно копируя любую папку в любое место. Только для Windows
Идеально подходит для моей текстовой игры для создания новых игроков.
источник
Я попытался fs-extra и copy-dir для копирования-папки-рекурсивно. но я хочу это
Поэтому я написал свой собственный:
и аналогичная функция mkdirs, которая является альтернативой mkdirp
источник
Я написал эту функцию как для копирования (copyFileSync), так и для перемещения (renameSync) файлов рекурсивно между каталогами:
источник
Если вы работаете в Linux, и производительность не является проблемой, вы можете использовать
exec
функцию изchild_process
модуля, чтобы выполнить команду bash:В некоторых случаях я нашел это решение более чистым, чем загрузка всего модуля или даже использование
fs
модуля.источник
ncp блокирует дескриптор файла и запускает обратный вызов, когда он еще не разблокирован. Я рекомендую использовать модуль рекурсивного копирования . Он поддерживает события, и вы можете быть уверены в окончании копирования.
источник
Будьте осторожны при выборе посылки. Некоторые пакеты, такие как copy-dir, не поддерживают копирование больших файлов длиной более 0x1fffffe8. Это выдаст ошибку вроде:
Я испытал нечто подобное в одном из моих проектов. В конечном итоге мне пришлось изменить пакет, который я использовал, и откорректировать много кода. Я бы сказал, что это не очень приятный опыт.
Если требуется несколько исходных и несколько целевых копий, вы можете использовать более точное копирование и написать что-то вроде этого:
или даже :
источник
ДА,
ncp
этоcool
хотя ...Возможно, вы захотите / должны пообещать его функцию, чтобы сделать это
super cool
. Поскольку вы на это, добавьте его вtools
файл, чтобы использовать его снова.Ниже приводится рабочая версия, которая есть
Async
и используетPromises
.index.js
tools.js
источник
Самый простой подход для решения этой проблемы - использовать только модули «fs» и «Path» и некоторую логику .....
Все файлы в корневой папке копируются с новым именем, если вы хотите просто установить номер версии, т.е. ....................... "var v = 'Ваш каталог Название'"
в префикс имени файла V добавлен контент с именем файла.
источник
Вот как я это сделал:
затем:
Затем вызовите метод:
источник