Wie werden Dateiattribute beim Kopieren von Dateien in Windows beibehalten?


41

Unter Linux können wir einfach Folgendes tun:

cp -pr directory

Wie mache ich das in Windows? Kann man das im Windows Explorer machen? Vorschläge für GUI-Tools?

Es wäre das Beste, wenn ich die NTFS-Berechtigungen und die Erstellungs- / Änderungs- / Zugriffszeit beibehalten könnte. Zumindest muss ich das Änderungsdatum für die Dateien und Verzeichnisse beibehalten . Die Kopie von Windows Explorer behält das Änderungsdatum für Verzeichnisse nicht bei.



1
Ich denke nicht, dass es ein Duplikat ist. Die Dateierstellungszeit ist nur eines der Dateiattribute.
Netvope

Die Antworten in dieser Frage enthalten Software, die alle Zeitstempel, Mtime, Ctime und Atime beibehält.
John T

Dies kann von Interesse sein: support.microsoft.com/kb/310316 . Leider funktionieren einige dieser Registrierungsschlüssel in Vista und höher nicht mehr.
Amro

robocopy c:\folderA c:\folderB /mir /itist alles, was du brauchst. Beachten Sie, dass dadurch C: \ OrdnerB vollständig gelöscht und ein neues C: \ OrdnerB erstellt wird, das C: \ OrdnerA widerspiegelt.
Pacerier

Antworten:


6

In Windows gibt es keine einfache Möglichkeit, dies zu tun. Es gibt mehrere Programme, die behaupten, die Erstellungsdaten von Dateien beibehalten zu können.
Hier sind einige Programme, die den Trick machen könnten: http://forum.soft32.com/windows/preserve-creation-date-Copy-ftopict361820.html   (Defekter Link; nicht in der Wayback-Maschine).

Es ist nicht möglich, nur den Windows Explorer zu verwenden. Wenn Sie sich die Dokumentation für CopyFile, CopyFile-Funktion (winbase.h) ansehen , werden Sie feststellen , dass das Thema umgangen wird. Die  CopyFile-Funktion (Windows Developer Preview) (ein 2012-Archiv mit derselben URL) sagt jedoch:

Datei mal Semantik

Dieser Artikel sollte die Semantik in Bezug auf die Erstellungs- / Änderungs- / Zugriffszeiten von Dateien dokumentieren.

Erstellungszeit: Wenn die Zieldatei bereits vorhanden ist, bleibt die Erstellungszeit erhalten , andernfalls wird sie auf die aktuelle Systemzeit gesetzt.
Letzter Änderungszeitpunkt: Wird immer vom Änderungszeitpunkt der Quelldatei kopiert.
Letzte Zugriffszeit: Stellt immer die aktuelle Systemzeit ein.


Verbindung ist unterbrochen.
Smile4ever

21

RoboCopy kann die Zeit für Verzeichnisse mit der Option / DCOPY: T beibehalten, dies funktioniert jedoch nur in Vista und neueren Versionen. Es können auch ACLs beibehalten werden. Alternativ kann FastCopy so konfiguriert werden, dass Verzeichniszeiten, ACLs und ADSs erhalten bleiben .


In Windows wird Robocopy empfohlen, da es nicht nur Datei- / Ordnerattribute kopiert, sondern auch eine ordnungsgemäße Dateiintegrität und Fehlerbehandlung während des gesamten Kopiervorgangs ermöglicht.
Megamorf

@megamorf: Inwiefern macht Robocopy etwas Besonderes? Es führt keine Prüfsummen oder Hashing-Vorgänge durch, sondern das Betriebssystem meldet Fehler wie fast jedes andere Programm.
afrazier

Ich bin damit einverstanden, dass Robocopy derzeit keine Funktion zum Vergleichen von Prüfsummen vor und nach dem Kopieren bietet. Im Allgemeinen überträgt Robocopy jedoch die gesamte Datei erneut, wenn ein Fehler auftritt. Wenn der Rest einer Datei nach einem Fehler wieder an das Ziel geschrieben werden soll, ohne die gesamte Datei erneut zu übertragen, geben Sie die Option / Z an.
Megamorf

@afrazier, warum nicht einfach benutzen /mir?
Pacerier

2
@Pacerier, da es nicht um das Spiegeln eines Baums geht, geht es darum, Dateien und Ordner zu kopieren und so viele Metadaten wie möglich beizubehalten. Sie müssen nicht nur /mirDaten aus dem /dcopy:tZielordner entfernen, sondern auch Verzeichniszeiten und /copyallmehr als nur die Dateizeitstempel beibehalten.
afrazier

19

... oder Sie können einfach ein Zip-Archiv erstellen (mit der Komprimierungsmethode "Speichern") und dann die Dateien entpacken, in die Sie sie kopieren möchten. Die Datums- / Uhrzeitattribute stimmen mit den Originaldateien überein.


Tolle Idee. Aber kopiert diese Datei "die anderen Sachen" wie Dateieigenschaften und etc etc?
Pacerier

2
Das funktioniert nicht immer. Bei 7-zip zum Beispiel wird bei der Verwendung der 7-zip-Komprimierung keine der Dateizeiten beibehalten (ich vergesse welche). Es werden keine Verzeichniszeiten beibehalten (wie ich mich erinnere). Mit ZIP können Sie sowohl erstellte als auch geänderte Zeiten beibehalten. 7zip behält jedoch nur einige der Zeiten bei, je nachdem, wie Sie die Datei entpacken: ob Sie sie per Drag & Drop oder aus dem Programmmenü extrahieren . Gut testen, junge Heuschrecke.
Jon

3
Vielen Dank, das hat bei mir gut funktioniert. Ich habe 7zip im ZIP-Format verwendet (Erstellungsdatum wird im 7Z-Format nicht beibehalten).
AFract

Könnten Sie den spezifischen Befehl hinzufügen, den Sie dazu verwenden würden? Ein Beispiel für den spezifischen Befehl zur Verwendung der von Ihnen vorgeschlagenen Komprimierungsmethode? Dies würde es eher zu einer vollständigen Antwort als zu einem Vorschlag oder Kommentar machen. Es würde auch unzähligen Menschen ersparen, eine Suche durchführen zu müssen, um herauszufinden, wie Sie Ihren Vorschlag umsetzen können. Als Bonus auch ein Link Es wäre fantastisch, wenn Sie Dokumente oder einen Artikel mit mehr Informationen zu dieser Methode bereitstellen würden. Die Bereitstellung aller Informationen erspart allen anderen die Neuerfindung des (Such-) Rads und kann die Stimmengewinne drastisch steigern. Vielen Dank!
SherylHohman

6

Robocopy-Befehlszeilenprogramm (wird mit den meisten Windows-Versionen geliefert)
Auf meinem Windows 10-Computer befindet es sich unterC:\Windows\System32

In Wikipedia kann es mit den folgenden Optionen verwendet werden, um Datei- und Verzeichniszeitstempel sowie andere Attribute beizubehalten:

Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPYALL /E /R:0

  • /DCOPY:TBeibehaltung der ursprünglichen Verzeichnis-Zeitstempel (erfordert Version XP026 oder höher)
  • /E: Verzeichnisse rekursiv kopieren, einschließlich leerer Verzeichnisse
  • /R:0: Gesperrte Dateien nicht wiederholen (der Standardwert für die Anzahl der Wiederholungsversuche bei fehlgeschlagenen Kopien beträgt 1 Million),

  • /COPYALL: Alle Dateiinformationen kopieren
    (entspricht /COPY:DATSOU, wo

    • D= Daten,
    • A= Attribute,
    • T= Datei-Zeitstempel ,
    • S= Sicherheit = NTFS-ACLs,
    • O= Besitzerinfo,
    • U= Prüfungsinformationen),

Wenn Sie nur Datum und Verzeichnis Zeitstempel erhalten wollen, aber tun nicht wollen leer Verzeichnisse kopiert und Sie nicht möchten , dass andere Attribute erhalten , dann können Sie verwenden:
Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPY:T /S

wo /SKopien nicht leeren Unterverzeichnisse

Um die vollständige Syntax anzuzeigen, geben Sie robocopy /?an einer Eingabeaufforderung Folgendes ein oder werfen Sie einen Blick auf die folgenden Blogeinträge: https://ss64.com/nt/robocopy.html und https://techjourney.net/robocopy-syntax-command-line -schalter-und-beispiele /

Ein Beispiel für einen Befehl, den ich kürzlich ausgeführt habe:
Robocopy D:\ C:\D_backup /DCOPY:T /COPYALL /E /R:0 /ZB /ETA /TEE /V /FP /XD D:\$RECYCLE.BIN /XD "D:\System Volume Information" /LOG:C:\D_backup_robocopy.LOG /MIR

Beachten Sie, dass beim Ausschließen von 2 Unterverzeichnissen das /XDFlag zweimal verwendet werden muss. Außerdem werden beim zweiten Verzeichnisausschluss Anführungszeichen verwendet, da der Verzeichnisname Leerzeichen enthält.

Schließlich können Sie das /LFlag hinzufügen , um den Befehl zu testen, bevor Sie ihn für echt ausführen. Auf diese Weise können Sie sicherstellen, dass keine Verzeichnisse / Dateien kopiert (oder entfernt) werden, die Sie nicht möchten, und dass Ihr Befehl keine Fehler enthält.

Edit: gotcha beim Kopieren von einem Root-Verzeichnis (aka Laufwerk) in einen Ordner (Nicht-Root-Verzeichnis)

Nach dem Ausführen des obigen Beispielbefehls war das Verzeichnis nicht sichtbar! (Auch wenn show hidden filesund show system fileswurden in Windows 10 überprüft!) Der folgende Befehl gemäß https://serverfault.com/a/455029/399723 behebt dies:

attrib -h -s C:\D_backup

Alternativ kann durch Hinzufügen der /A-:SHOption "Verborgenes Attribut aus Systemdateien entfernen" verhindert werden, dass das Verzeichnis zunächst ausgeblendet wird (siehe https://serverfault.com/a/565804/399723) . Siehe auch https://ss64.com/nt/robocopy.html .
In dieser Beschreibung wird diese Option als Lösung näher erläutert .

Robocopy D:\ C:\D_backup /A-:SH /DCOPY:T /COPYALL /E /R:0 /ZB /ETA /TEE /V /FP /XD D:\$RECYCLE.BIN /XD "D:\System Volume Information" /LOG:C:\D_backup_robocopy.LOG /MIR

Andere Software:

Alternativ können Sie eine GUI-Version von robocopy herunterladen, wenn Sie die Befehlszeile nicht verwenden möchten.

Ein weiteres Windows-Dienstprogramm ist XCopy , obwohl es in Windows 10 enthalten ist, wird es nicht mehr empfohlen. Siehe den Link für Fallstricke.

Die Wikipedia-Seite für RoboCopy (oben in diesem Beitrag verlinkt) listet andere Software auf, die verwendet werden kann.


1
Gute Antwort. Sollte der Auserwählte sein, da der erste irgendwie veraltet ist. Benutzte Robocopy seit Windows 7, um leere Directoeies aus den Backups des Clients zu entfernen. Ich glaube, es war verfügbar seit Windows XP
DGoiko

@ DGoiko Ich denke du hast recht. Ich habe es ausgiebig mit Windows 7 verwendet. Leider ist der Kauf spezieller Windows 7 Pro-Laptops nicht mehr möglich. Also habe ich jetzt Win 10. Ich glaube nicht, dass ich jemals nachgesehen habe, als ich XP hatte, aber es ist schon eine lange Zeit her. Einfach nicht so bekannt.
SherylHohman

Robocopy GUI ist ausgezeichnet.
Eddie Kumar

4

Synchronisiere es! 3.5 behält alle Zeitstempel (Dateien und Ordner, Änderung und Erstellung). Dies ist neben Robocopy die einzige Software, die ich unter Windows XP kenne, und ich habe viele ausprobiert. Beachten Sie jedoch, dass es zu fehlerhaften Dateien mit Quelldateien kommen kann, die mit Software wie FlashGet oder Orbit Downloader heruntergeladen wurden (die resultierenden Dateien haben dieselbe Größe, aber nur 25 KB werden tatsächlich kopiert - der Rest wird mit Nullen gefüllt). Ich fragte den Ersteller der Software, ob er herausfinden könne, warum, aber er hatte keine Ahnung. Ich vermute, es hat damit zu tun, dass solche Software Dateien in kleinen Paketen herunterlädt (um die Geschwindigkeit zu optimieren) und meine Datenpartition sehr fragmentiert ist.

Robocopy XP026 ist zwar in Windows Vista enthalten, funktioniert aber unter Windows XP. Suchen Sie nach "Robocopy XP026", oder ich kann die Datei hier senden, da sie nicht leicht zu finden ist. Sie können auch die Robocopy-GUI installieren und dann robocopy.exeim Ordner System32 nach der Datei suchen , um sie über die Befehlszeile zu verwenden. Die Datei, die ich habe, ist 208kB und die Versionsnummer ist 5.1.2600.26.

Es scheint jedoch einen Fehler im "Backup-Modus" zu geben:

http://msmvps.com/blogs/martinzugec/archive/2008/03/03/ugly-bug-in-robocopy-ignoring-security-on-file-level.aspx

Die Robocopy-Version XP027 hat diesen Fehler anscheinend nicht mehr, funktioniert aber unter Windows XP nicht mehr.


Dienstprogramme zum Herunterladen von Dateien (wie Bittorrent) ordnen die gesamte Größe der Datei auf der Festplatte (mit 0 gefüllt) zu und laden Abschnitte aus mehreren Quellen herunter, wobei sie an der richtigen Stelle in der Datei gespeichert werden. Die Dateien haben beim Start viele 0000. Entweder wurde die Datei nie vollständig heruntergeladen oder sie wird synchronisiert! sah zu viele 0000 und gab die Kopie auf.
Chloe

Vielen Dank! Ich habe Synchronize It! Es ist auch so schnell! SyncToy und Unison haben die Änderungszeiten der Dateien durcheinander gebracht. Unison hat Cygwin-Symlinks beschädigt. SyncToy kopierte sogar "Meine Musik", was sich in einer Kreuzung am Zielort herausstellte, aber als ich es auffrischte, wollte es immer wieder kopieren, obwohl alles gleich war!
Chloe



1
xcopy *.* C:\temp\Pics /c /d /e /h /i /k /q /r /s /x /y

Ich bin nicht sicher, welcher Schalter das Dateidatum beibehält, aber das funktioniert. Dann komprimiere ich das Verzeichnis C: \ temp \ Pics, in dem auch die oben erwähnten Dateidaten gespeichert sind.


1
Wie passt das Zippen der Kopie in diese Diskussion?
Scott

Es passt, indem auch Zeitstempel für die [gezippten] Dateien gepflegt werden, was die Person zu beschäftigen scheint, die die Frage gestellt hat. Gern geschehen, Scott. Dies ergibt eine nützliche Antwort, wenn nicht die richtige.
amn

Auf diese Weise werden Datum und Uhrzeit der Datei beibehalten, nicht jedoch für den Ordner.
Barneco

1

Der einfachste Weg für mich ist bisher die "send to" -Methode. Es werden keine externen Anwendungen benötigt. Nach meiner Erfahrung werden alle ursprünglichen Dateiattribute beibehalten.

Die Methode, die ich zuvor verwendet habe, war die Komprimierungs- / Zip-Ordner-Methode. Dies wird jedoch sicherlich länger dauern, da die Dateien nicht nur kopiert, sondern auch verarbeitet und komprimiert werden, sowohl beim Komprimieren als auch beim Dekomprimieren.

%appdata%\Microsoft\Windows\SendTo
oder. C:\Users\_______\AppData\Roaming\Microsoft\Windows\SendTo

Fügen Sie dem Ordner, in den Sie sie kopieren möchten, eine Verknüpfung hinzu, und das Element wird in Ihrem sendtoMenü angezeigt, wenn Sie mit der rechten Maustaste auf eine Datei klicken, die Sie kopieren möchten.


Vielen Dank, dass Sie den Trick "Rechtsklick> Senden an" geteilt haben. Es funktioniert mit Ausnahme des Erstellungsdatums. Früher war ich mit dem nativen Befehl xcopy: xcopy Source Destination /kes. (Mit dem kFlag kann der Änderungszeitstempel beibehalten werden, das Erstellungsdatum wird jedoch nicht beibehalten.) Die Komprimierungsmethode für zip (oder rar) ist eine gute Methode, dauert jedoch häufig zu lange.
OuzoPower

0

Es ist einfach, Ordner und Verzeichnisse zu verschieben und dabei das Erstellungsdatum beizubehalten. Halten Sie Shiftden Ordner einfach gedrückt und ziehen Sie ihn an den neuen Speicherort (Befehl zum Verschieben). Das Änderungsdatum ist das aktuelle Datum, aber das Erstellungsdatum behält das ursprüngliche Datum bei.


2
MACH DAS NICHT! Dadurch werden die Dateien aus dem ursprünglichen Ordner gelöscht. Ich habe gerade unwiederbringliche Daten von meinem Telefon verloren, als ich dies versuchte (STRG + Z funktioniert nicht).
BadAtPHP


0

xcopy funktioniert gut dafür. Geben Sie einfach das Flag / k an, um die Attribute zu kopieren.

Syntax
xcopy Quelle [Ziel] [Optionale Parameter]

Der Befehl xcopy kann eine oder mehrere Dateien oder Verzeichnisbäume von einem Speicherort an einen anderen kopieren. Der Befehl xcopy ist in allen Windows-Versionen von Windows 95 bis Windows 8 enthalten.


1
Ich habe gerade den /KParameter ausprobiert und er hat die Erstellungsdaten nicht beibehalten.
CoDEmanX

Es scheint mir, wie es manchmal funktioniert und manchmal nicht - Fenster von seiner besten Seite;)
SebastianH

0

Das schaffe ich mit

rsync -avu --modify-window = 3602 Quellverzeichnis / Zielverzeichnis /

(Dies wird wirklich als Synchronisierungstool von einem Verzeichnis zu einem anderen Spiegel verwendet. Die Option timewindow dient dazu, Probleme zu vermeiden, wenn Windows-Systeme im Vergleich zu Linux-Systemen die Zeit um 1 Stunde verschieben, um Sommerzeit usw. zu sparen.)

in cygwin-umgebung innerhalb von windows oder einer virtuellen linux-maschine innerhalb von windows mit aktivierten windows-laufwerken (zb mit virtualbox)

NB cygwin und virtualbox sind beide kostenlos und ermöglichen es Ihnen, Linux-Funktionen unter Windows in geringerem oder größerem Umfang zu nutzen - beide erfordern ein wenig Einrichtung - insbesondere virtualbox, haben aber viele Vorteile.

Mein eigenes Problem war, dass Dateien die richtige Zeit haben, Verzeichnisse jedoch nicht. rsync hat die Daten in den Verzeichnissen sowie die Daten in den Dateien aussortiert.


0

Dieser Befehl kopiert den gleichen Zeitstempel für Dateien. Beachten Sie, dass für die Ordner selbst nicht genau dieselbe Zeitstempelung ausgeführt wird. Beachten Sie auch, dass ich die Quelle (Temp1) und das Ziel (Temp2) in Anführungszeichen gesetzt habe. Dies erfolgt für den Fall, dass die Pfade Leerzeichen enthalten. Ich habe keine Leerzeichen, aber ich dachte, ich sollte es für Worst-Case-Szenarien einschließen.

robocopy /E /copy:DAT "C:\Temp1" "c:\Temp2"

So behalten Sie die Zeitstempel auch für Ordner bei:

robocopy / E / copy: DAT / dcopy: DAT "C: \ Temp1" "c: \ Temp2"

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.