﻿************
*          *
*  Mirror  *
*          *
************



Qu'est-ce que Mirror ?
----------------------

Mirror permet d'effectuer une copie exacte d'un répertoire à un autre endroit.
Si le répertoire de destination existe déjà, Mirror ne copie que les fichiers
ayant été ajoutés, modifiés, ou supprimés par rapport au répertoire original.

Mirror est donc particulièrement adapté aux sauvegardes régulières.
On gagne du temps par rapport à une copie de fichiers classique,
car seuls les fichiers modifiés ou ajoutés sont transférés. De plus,
les fichiers supprimés dans le répertoire original sont également supprimés
dans la copie, ce qui évite de gâcher de l'espace disque si vous renommez
ou déplacez des fichiers.

Mirror est un outil en ligne de commande, sans interface graphique.
Il peut donc être facilement utilisé dans des scripts et des fichiers BATCH.


Où trouver Mirror ?
-------------------

Site Web        http://utilfr42.free.fr/util/Mirror.php
L'auteur        Guillaume Ryder
E-mail          guillaume@ryder.fr


Comment installer Mirror ?
--------------------------

Choisissez le fichier EXE correspondant à votre version de Windows :
- 64 bits : prenez Mirror64.exe ;
- 32 bits, Windows NT/2000/XP/Vista/7/8 : prenez MirrorNT.exe ;
- 32 bits, Windows 95/98/ME : prenez Mirror9x.exe.

Copiez le fichier dans C:\Windows pour qu'il soit exécutable de n'importe où
sans avoir à spécifier son chemin d'accès. Ensuite, lancez le programme
à partir d'une console (command.com ou cmd.exe).

Vous pouvez renommer le fichier MirrorXX.exe choisi en Mirror.exe ou tout
autre nom, à votre convenance.


Comment utiliser Mirror ?
-------------------------

Utilisation classique :
C:\MesFichiers est le répertoire à copier
E:\Sauvegarde\MesFichiers est le répertoire de destination

Commencez par créer le répertoire E:\Sauvegarde\MesFichiers, Mirror ne le crée
pas automatiquement afin de détecter certaines erreurs.

Ouvrez ensuite une console (command.com ou cmd.exe), puis tapez :
mirror.exe C:\MesFichiers E:\Sauvegarde\MesFichiers

Vous pouvez automatiser la procédure en créant un fichier BATCH
(extension .bat) contenant ces deux lignes :

@echo off
mirror.exe C:\MesFichiers E:\Sauvegarde\MesFichiers


Pourquoi Mirror a-t-il des problèmes avec les dates de modification ?
---------------------------------------------------------------------

Si vous utilisez Mirror avec un répertoire source dans une partition NTFS
et un répertoire de destination dans une partition FAT16 ou FAT32,
vous constaterez une imprécision dans la copie de la date de modification.
Les dates de modification des partitions FAT sont arrondies aux 2 secondes
les plus proches, tandis que les dates de modification des partitions NTFS
sont très précises (100 nanosecondes). Cela explique pourquoi des fichiers
miroirs l'un de l'autre peuvent ne pas avoir exactement la même date
de modification.

Par défaut, Mirror tente d'éviter les problèmes de précision en considérant
comme égales deux dates différant de 5 secondes ou moins. Vous pouvez
modifier cette précision avec l'option --time-precision.

De plus, les dates de modification des partitions FAT sont locales :
elles tiennent compte du fuseau horaire et de l'heure d'été. C'est pourquoi
Mirror convertit les dates de modification en temps universel (UTC)
avant de les comparer. C'est suffisant dans la plupart des cas, mais pas
si vous changez votre fuseau horaire dans les paramètres de Windows, ou si
vous utilisez des disques externes provenant d'un autre pays en même temps
que vos disques locaux.

Dans ces cas particuliers, vous pouvez:
- Activer l'option --log-time-diff pour afficher les différence de dates perçues
  par Mirror, puis définir les options --time-shift et --time-precision en
  conséquence.
- Utiliser l'option --time-compare-contents pour forcer la comparaison
  octet par octet des fichiers. Cela sera plus sûr que l'option précédente
  tout en restant plus rapide que de recopier tous les fichiers.
Les deux méthodes mettront à jour la date de modification de tous les fichiers
de destination, y compris ceux qui n'auront pas été mis à jour.


Quelles sont les options de Mirror ?
------------------------------------

Lancez le programme sans argument pour afficher l'aide complète des options.

L'aide de Mirror ainsi que tous les messages affichés à l'écran
sont en anglais uniquement.


Usage: mirror <source directory> <destination directory> [options]

Mirrors copies and/or deletes files in the destination directory to make it
identical to the source directory.

Mirror considers all files and sub-directories of the source and destination
directories, recursively unless --no-recurse is set.

With at least one --include or --exclude set, Mirror considers only the files
that either match at least one pattern (--include) or match none of them
(--exclude), ignoring all other files or directories as if they did not exist.
When ignoring a directory, Mirror always ignores all its files and
sub-directories recursively, even if some of them match an --include pattern.
--include applies only to files. --exclude applies to files and directories.

By default, compares files by size and modification time to determine whether
to update the file in the destination directory. See below for how to change
that behavior.

If no --exclude nor --include option is specified, examines all files.

Returns 0 on success, 1 on error.

Options:
--help, -h, -?, /?
Display this help.

-x=<pattern>, --exclude=<pattern>
Ignore the files and directories whose full path matches the pattern.
Cannot be used with --include options.
Specify the option multiple times to exclude multiple patterns.
The pattern can use wildcards: `?' matches exactly one character; `*' matches
any number of characters, possibly none. Examples: *.txt, *\.git, *.i??
Enclose the whole option in quotes if it contains spaces.

-i=<pattern>, --include=<pattern>
Ignores all files and directories but those whose full path matches the pattern.
Cannot be used with --exclude options.
Specify the option multiple times to include multiple patterns.
See --exclude above for details.

-v, --virtual
Virtual mode, aka dry run: do not alter any file, only read files and print
logging information.

-ua, --unset-archive
Unset the archive attribute of mirrored files in the source directory.

-nr, --no-recurse
Do not recurse in subdirectories.

-nj, --no-junctions
Do not recurse in junction directories.

-nd, --no-delete
Never delete files from the destination directory, even if they are not found in
the source directory.

-na, --no-add
Never add files to the destination directory, even if they are found in the
source directory and missing in the destination directory.

-nu, --no-update
Never update files to the destination directory, even if they are found in the
source directory and different.

-nm, --no-meta
Do not update file metadata in the destination directory when it is the only
difference: attributes, last modification time, filename case.

-ct[=y/n], --compare-time[=y/n], enabled by default
Take modification time into account to compare files.

-cs[=y/n], --compare-size[=y/n], enabled by default
Take file size into account to compare files.

-ca[=y/n], --compare-archive[=y/n]
Take archive attributes into account to compare files. Files in source directory
with the archive attribute set are considered as different from the matching
file in the destination directory.

-cc[=y/n], --compare-contents[=y/n]
Compare the files contents byte per byte. Slow but accurate.

-tcc[=y/n], --time-compare-contents[=y/n]
If the files don't have the same modification time, compare them in the
same way as --compare-contents above and do not take the modification times into
account.

-fsf[=y/n], --time-shift-fat[=y/n], enabled by default
Convert FAT files times from local to system time before comparing them, to
avoid daylight saving time problems.

-tp[=number], --time-precision[=number], 5 by default
Precision for time comparison, in seconds. Useful to solve FAT time issues.

-ts[=number], --time-shift[=number], 0 by default
The time shift to apply to destination files, in seconds. Can be negative.
Useful to solve FAT time issues.

-tm[=y/n], --time-meta[=y/n]
Mirror last modification times as part of file metadata updates.

-lh[=y/n], --log-header[=y/n], enabled by default
Display the mirroring header, indicating the mirrored directories.

-lc[=y/n], --log-changes[=y/n], enabled by default
Log all file changes: files copied, updated, or deleted.

-le[=y/n], --log-equal[=y/n]
Log identical files (thus not altered).

-li[=y/n], --log-ignored[=y/n]
Log files ignored due to --no-delete, --no-add, or --no-update.

-lcc[=y/n], --log-compare-contents[=y/n], enabled by default
Display file names when they are compared byte per byte.

-ltd[=y/n], --log-time-diff[=y/n]
Display modification time difference of compared files, taking into account all
time shifting options.

-lm[=y/n], --log-meta[=y/n], enabled by default
Log files having their meta information updated: attributes, modification time,
file name case.

-ld[=y/n], --log-directories[=y/n]
Display directories name when they are analyzed.

-ll[=y/n], --log-list[=y/n]
Display only the list of affected files, without operation names and directory
headers.

-lo[=y/n], --log-oem[=y/n], enabled by default
Output filenames using OEM (DOS) charset. Disable this option if you plan to use
the log results in a Win32 script or program.
