Acabou de escrever um programa em java para fazer isso ... Não vai postar o código aqui porque é rápido, sujo e espaguete;) ... É robusto, no entanto, e você pode baixar o código-fonte simples de www.nexle.dk/permanent-downloads/StackExchange/FileModChanger.java.zip para usar modificar, compilar e usar livremente (mas sem garantia, verifique e teste antes de executar).
O que a ferramenta faz essencialmente é que ela pega as últimas datas modificadas dos arquivos em uma estrutura de pastas e a aplica a arquivos em outra pasta, desde que;
- os nomes e caminhos dos arquivos são os mesmos (segurança)
- o conteúdo do arquivo é o mesmo (verificação md5, novamente por segurança)
- a data ainda não é a mesma para os dois arquivos
Corri contra ~ 500.000 arquivos e pareceu funcionar o.k.
Algumas notas;
- apenas altera a data / hora / data / hora da última modificação, pelo que deve ser seguro
- a ferramenta é padrão no modo "execução a seco", o que significa que ela mostrará o que ela faria, mas não executará alterações (o modo 'real' é ativado por um argumento de linha de comando 'real)
- Ele usa algum código da web (crédito dentro do arquivo de origem).
- Poderia ser mais rápido, mas rápido o suficiente
- Tem um pequeno indicador de progresso ao analisar todos os diretórios de arquivos pela primeira vez;)
Algum código para o qual você pode se inspirar também se você quiser navegar pelo código inteiro;
Como alterar a data de modificação do arquivo em Java;
File sourceFile = new File("/tmp/sourcefile");
File targetFile = new File("/tmp/targetfile");
long sourceDateModified = sourceFile.lastModified();
targetFile.setLastModified(sourceDateModified);
Espero que alguém consiga achar útil também. Obrigado por todos os comentários e sugestões.
Uso e saída do console para a ferramenta finalizada que você pode baixar (veja acima);
$ 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..
Além disso, você pode precisar aumentar a memória do Java se tiver muitos arquivos e pastas.