Закончилось написание Java-программы для этого ... Не буду размещать код здесь, потому что он быстрый, грязный и спагетти;) ... Однако он надежен, и вы можете загрузить простой исходный код с www.nexle.dk/permanent-downloads/StackExchange/FileModChanger.java.zip, чтобы свободно модифицировать, компилировать и использовать (но без гарантии, проверьте и протестируйте перед запуском) ,
По сути, этот инструмент заключается в том, что он берет даты последнего изменения файлов в одной структуре папок и применяет их к файлам в другой папке при условии ТО;
- имена файлов и пути одинаковы (безопасность)
- содержимое файла одинаково (проверка md5, опять же для безопасности)
- дата уже не одинакова для обоих файлов
Я запустил его на ~ 500 000 файлов, и он, кажется, работает нормально
Некоторые заметки;
- он изменяет только дату последнего изменения даты / времени / времени, поэтому он должен быть безопасным
- инструмент по умолчанию работает в режиме "пробного запуска", что означает, что он покажет вам, что он будет делать, но не выполнит изменения ("реальный" режим активируется аргументом командной строки "реальный").
- Он использует некоторый код из Интернета (кредит внутри исходного файла).
- Это может быть быстрее, но достаточно быстро
- У этого есть симпатичный маленький индикатор прогресса, анализируя все каталоги для файлов в первый раз;)
Некоторый код, из которого вы также можете черпать вдохновение, если хотите перебрать весь код;
Как изменить дату изменения файла в Java;
File sourceFile = new File("/tmp/sourcefile");
File targetFile = new File("/tmp/targetfile");
long sourceDateModified = sourceFile.lastModified();
targetFile.setLastModified(sourceDateModified);
Надеюсь, кому-то еще это тоже пригодится. Спасибо за все комментарии и подсказки, хотя.
Использование и вывод на консоль готового инструмента вы можете скачать (см. Выше);
$ java -classpath . FileModChanger
USAGE (dry run, NO file changes made):
FileModChanger <source folder with original dates> <target folder with new/erased dates>
USAGE (real run,file date changes WILL be made):
FileModChanger <source folder with original dates> <target folder with new/erased dates> real
$ java -classpath . FileModChanger /Volumes/Untitled/D/knowledge/ISYS\ Desktop\ 6/ /Knowledge/ISYS\ Desktop\ 6/
Starting DRY run....
Starting DRY run....
Starting DRY run....
Starting to retrieve list of files (this may take a LONG time)...
0 folders processed
DONE creating the list of files, starting comparison...
About to operate on Volumes/Untitled/D/knowledge/IS[...]S Desktop 6/ISYSDesktop6Setup.exe:
SRC:Tue Jul 01 11:29:46 EST 2003 - bff684bfac4ed37e4a6b9a05ab625855 - Volumes/Untitled/D/knowledge/IS[...]S Desktop 6/ISYSDesktop6Setup.exe
TRG:Tue Dec 21 04:05:24 EST 2010 - bff684bfac4ed37e4a6b9a05ab625855 - /Knowledge/ISYS Desktop 6/ISYSDesktop6Setup.exe
DONE processing all files..
$ java -classpath . FileModChanger /Volumes/Untitled/D/knowledge/ISYS\ Desktop\ 6/ /Knowledge/ISYS\ Desktop\ 6/ real
Starting REAL run....
Starting REAL run....
Starting REAL run....
Starting to retrieve list of files (this may take a LONG time)...
0 folders processed
DONE creating the list of files, starting comparison...
About to operate on Volumes/Untitled/D/knowledge/IS[...]S Desktop 6/ISYSDesktop6Setup.exe:
SRC:Tue Jul 01 11:29:46 EST 2003 - bff684bfac4ed37e4a6b9a05ab625855 - Volumes/Untitled/D/knowledge/IS[...]S Desktop 6/ISYSDesktop6Setup.exe
TRG:Tue Dec 21 04:05:24 EST 2010 - bff684bfac4ed37e4a6b9a05ab625855 - /Knowledge/ISYS Desktop 6/ISYSDesktop6Setup.exe
RESULT:
- BEFORE: Tue Dec 21 04:05:24 EST 2010
- AFTER: Tue Jul 01 11:29:46 EST 2003
DONE processing all files..
Кроме того, вам может понадобиться увеличить память Java, если у вас много файлов и папок.