Gibt es einen einfacheren Weg , um einen Ordner und seinen Inhalt , ohne manuell zu tun eine Folge von kopieren fs.readir
, fs.readfile
, fs.writefile
rekursiv?
Ich frage mich nur, ob mir eine Funktion fehlt, die idealerweise so funktioniert
fs.copy("/path/to/source/folder","/path/to/destination/folder");
javascript
node.js
verlorene Quelle
quelle
quelle
Antworten:
Sie können das ncp- Modul verwenden. Ich denke, das ist was du brauchst
quelle
npm install ncp
und arbeiten in weniger als 30s. Vielen Dank.Dies ist mein Ansatz, um dieses Problem ohne zusätzliche Module zu lösen. Nur mit den eingebauten
fs
undpath
Modulen.Hinweis: Hierbei werden die Lese- / Schreibfunktionen von fs verwendet, sodass keine Metadaten (Erstellungszeitpunkt usw.) kopiert werden. Ab Knoten 8.5
copyFileSync
stehen Funktionen zur Verfügung, die die OS-Kopierfunktionen aufrufen und damit auch Metadaten kopieren. Ich habe sie noch nicht getestet, aber es sollte funktionieren, sie einfach zu ersetzen. (Siehe https://nodejs.org/api/fs.html#fs_fs_copyfilesync_src_dest_flags )quelle
javascript var fs = require('fs'); var path = require('path');
fs.copy
oder aufrufen, umfs.copySync
Dateien tatsächlich zu kopieren.fs.copyFile
und wenn Sie dieEs gibt einige Module, die das Kopieren von Ordnern mit ihrem Inhalt unterstützen. Am beliebtesten wäre der Schraubenschlüssel
Eine Alternative wäre Node-Fs-Extra
quelle
wrench
veraltet ist und durchnode-fs-extra
( github.com/jprichardson/node-fs-extra )Hier ist eine Funktion, die ein Verzeichnis und seinen Inhalt rekursiv in ein anderes Verzeichnis kopiert:
quelle
fs.lstatSync
anstelle von verwendenfs.statSync
)linking
kopiert nicht .. Das Problem ist, wenn Sie den Inhalt der verknüpften Datei ändern, ändert sich auch die Originaldatei.fs-extra
arbeitete für mich wannncp
undwrench
fiel zu kurz:https://www.npmjs.com/package/fs-extra
quelle
wrench
weist der Entwickler von Benutzern an, diese zu verwenden,fs-extra
da er seine Bibliothek veraltet hat.Für Linux / Unix-Betriebssysteme können Sie die Shell-Syntax verwenden
Das ist es!
quelle
Das fs-extra Modul funktioniert wie ein Zauber.
Installieren Sie fs-extra
Das folgende Programm kopiert das Quellverzeichnis in das Zielverzeichnis.
Verweise
fs-extra: https://www.npmjs.com/package/fs-extra
Beispiel: NodeJS Tutorial - Node.js Kopieren Sie einen Ordner
quelle
So würde ich es persönlich machen:
funktioniert für Ordner und Dateien
quelle
Ich habe ein kleines Arbeitsbeispiel erstellt, das einen Quellordner in nur wenigen Schritten in einen anderen Zielordner kopiert (basierend auf der @ shift66-Antwort mit ncp):
Schritt 1 - Installieren Sie das NCP-Modul:
Schritt 2 - Erstellen Sie copy.js (ändern Sie die Variablen srcPath und destPath nach Ihren Wünschen):
Schritt 3 - ausführen
quelle
Dies ist mit Knoten 10 ziemlich einfach.
Dies setzt voraus, dass
dest
es nicht existiert.quelle
require('util').promisify
mitfs.mkdir
undfs.copyFile
anstelle von verwendenrequire('fs').promises
, was in Version 11.1 noch experimentell ist.withFileTypes
Option? Weil das Ihnen einenstat
Anruf erspartwithFileTypes
Option.Ich kenne hier schon so viele Antworten, aber niemand hat es auf einfache Weise beantwortet. In Bezug auf die offizielle Dokumentation von fs-exra können Sie dies sehr einfach tun
quelle
{ recursive: true }
aus dem von Ihnen erwähnten Github-Dokument finden. Ich weiß nicht, ob es funktioniert.Da ich nur ein einfaches Knotenskript erstelle, wollte ich nicht, dass die Benutzer des Skripts eine Reihe externer Module und Abhängigkeiten importieren müssen. Deshalb setzte ich meine Denkkapsel auf und suchte nach ausgeführten Befehlen aus der Bash Schale.
Dieses Code-Snippet von node.js kopiert rekursiv einen Ordner namens node-webkit.app in einen Ordner namens build:
Vielen Dank an Lance Pollard von dzone für den Einstieg.
Das obige Snippet ist auf Unix-basierte Plattformen wie Mac OS und Linux beschränkt, aber eine ähnliche Technik kann für Windows funktionieren.
quelle
@ mallikarjun-m danke!
fs-extra hat das Ding gemacht und es kann sogar Promise zurückgeben, wenn Sie keinen Rückruf geben! :) :)
quelle
Der mit Unterstützung für symbolische Links + wirft nicht, wenn ein Verzeichnis vorhanden ist.
quelle
Dieser Code funktioniert einwandfrei und kopiert rekursiv jeden Ordner an einen beliebigen Speicherort. Nur Windows.
Funktioniert perfekt für mein textbasiertes Spiel zum Erstellen neuer Spieler.
quelle
Ich habe versucht, fs-extra und copy-dir rekursiv in den Ordner zu kopieren. aber ich will es
Also schrieb ich meine eigenen:
und eine ähnliche Funktion mkdirs, die eine Alternative zu mkdirp ist
quelle
Ich habe diese Funktion sowohl zum Kopieren (copyFileSync) als auch zum rekursiven Verschieben (renameSync) von Dateien zwischen Verzeichnissen geschrieben:
quelle
Wenn Sie unter Linux arbeiten und die Leistung kein Problem darstellt, können Sie die
exec
Funktion fromchild_process
module verwenden, um einen Bash-Befehl auszuführen:In einigen Fällen fand ich diese Lösung sauberer als das Herunterladen eines gesamten Moduls oder sogar die Verwendung eines
fs
Moduls.quelle
ncp sperrt den Dateideskriptor und löst einen Rückruf aus, wenn er noch nicht entsperrt wurde. Ich empfehle stattdessen das Modul für rekursives Kopieren . Es unterstützt Ereignisse und Sie können sicher sein, dass die Kopie endet.
quelle
Seien Sie vorsichtig bei der Auswahl Ihres Pakets. Einige Pakete wie copy-dir unterstützen das Kopieren großer Dateien mit einer Länge von mehr als 0x1fffffe8 nicht. Es wird ein Fehler wie:
Ich habe so etwas in einem meiner Projekte erlebt. Letztendlich musste ich das verwendete Paket ändern und viel Code anpassen. Ich würde sagen, dass dies keine sehr angenehme Erfahrung ist.
Wenn mehrere Quell- und mehrere Zielkopien gewünscht werden, können Sie eine bessere Kopie verwenden und Folgendes schreiben:
oder auch :
quelle
JA,
ncp
istcool
aber ...Vielleicht möchten / sollten Sie versprechen, seine Funktion zu machen
super cool
. Wenn Sie schon dabei sind, fügen Sie es einertools
Datei hinzu, um es wiederzuverwenden.Unten ist eine Arbeitsversion, die ist
Async
und verwendetPromises
.index.js
tools.js
quelle
Der einfachste Ansatz für dieses Problem besteht darin, nur die Module 'fs' und 'Path' sowie eine Logik zu verwenden.
Alle Dateien im Stammordner werden mit dem neuen Namen kopiert, wenn Sie nur die Versionsnummer festlegen möchten, dh ....................... "var v = 'Ihr Verzeichnis Name'"
in Dateiname Präfix V Inhalt mit dem Dateinamen hinzugefügt.
quelle
So habe ich es gemacht:
dann:
Rufen Sie dann die Methode auf:
quelle