тл; др и пример
Я ищу способ рекурсивного сравнения двух папок и вывода относительных путей ко всем файлам (и папкам), которые отличаются (по размеру или по метке времени, как rsync).
Например, скажем, у меня есть
C:\source\foo\a.txt
C:\source\foo\bar\b.txt
C:\source\foo\bar\c.txt
а также
C:\target\foo\a.txt
C:\target\foo\bar\b.txt
C:\target\foo\bar\d.txt
C:\target\foo\baz\
и предположим, что b.txt
был изменен в C:\source
и, таким образом, является более новым.
Затем, используя магический сценарий или команду, скажем, magic C:\source C:\target
, я бы хотел, чтобы вывод был
foo\bar\b.txt
Или полный путь к исходной или целевой папке тоже будет приемлемым:
C:\source\foo\bar\b.txt
Как показывает пример, меня не волнуют файлы и папки, которые были удалены или созданы! Что должно сделать эту задачу намного проще, чем иначе.
Что я уже знаю ...
Я сам разработчик UNIX и не спрашиваю, была ли это система UNIX, с которой мы имеем дело, но увы. Кроме того, это для пользовательского решения для ночного резервного копирования, где надежность и целостность данных являются приоритетом, поэтому, учитывая, что несколько недель назад я даже не мог выяснить цикл for в пакетном скрипте, я почти уверен, что мне не хватает опыт, чтобы сделать это правильно, или даже определить лучший способ сделать это.
Читая http://www.howtoforge.com/backing-up-with-rsync-and-managing-previous-versions-history, я узнал, что rsync может делать что-то вроде того, что мне нужно, используя такие параметры, как
--dry-run # don't actually rsync (touch) any files
--itemize-changes # list changes rsync _would_ have made
--out-format="%i|%n|" # define an output format for the list of changes
Однако я не хотел бы полагаться на то, что Cygwin (cwRsync) будет использовать rsync, так как я уже склонен к проведению быстрых и грязных экспериментов на моей установке Cygwin, часто нарушая среду и требуя переустановки Cygwin каждые несколько недель. Этот вид противостоит "надежной" части ночной резервной копии.
Я не нашел ни одного "канонического" инструмента, такого как rsync, в Windows, по крайней мере, такого, который бы поддерживал опции, подобные приведенным выше. Кроме того, я не ищу программное обеспечение вообще, если это не простой и компактный инструмент специально для этой цели - я предпочитаю прозрачное, программное решение. Для чего-то столь же важного, как резервное копирование файлов, полагаться на программное обеспечение или код, который я не вижу или не понимаю, страшно!
резюмировать
Я не могу обернуть голову вокруг синтаксиса пакетного сценария. Далее я попробую PowerShell. Но что бы вы сделали, если бы выполнили эту задачу?- Есть ли какой-то очевидный маршрут, по которому я скучаю?