Я надеюсь использовать Java или отличный для получения md5 контрольной суммы полного списка.
Я должен скопировать каталоги для источника для предназначения, источник и цель контрольной суммы, и после того, как удалят исходные каталоги.
Я нахожу этот сценарий для файлов, но как сделать то же самое с каталогами?
import java.security.MessageDigest
def generateMD5(final file) {
MessageDigest digest = MessageDigest.getInstance("MD5")
file.withInputStream(){ is ->
byte[] buffer = new byte[8192]
int read = 0
while( (read = is.read(buffer)) > 0) {
digest.update(buffer, 0, read);
}
}
byte[] md5sum = digest.digest()
BigInteger bigInt = new BigInteger(1, md5sum)
return bigInt.toString(16).padLeft(32, '0')
}
Существует ли лучший подход?
Я сделал функцию для вычисления контрольной суммы MD5 по директории :
Сначала я использую FastMD5: http://www.twmacinta.com/myjava/fast_md5.php
Вот мой код:
def MD5HashDirectory(String fileDir) {
MD5 md5 = new MD5();
new File(fileDir).eachFileRecurse{ file ->
if (file.isFile()) {
String hashFile = MD5.asHex(MD5.getHash(new File(file.path)));
md5.Update(hashFile, null);
}
}
String hashFolder = md5.asHex();
return hashFolder
}
Неясно, что значит принимать md5sum каталога. Возможно, вам нужна контрольная сумма списка файлов; может потребоваться контрольная сумма списков файлов и их содержимое. Если вы уже суммируете сами данные файла, я бы предложил вам указать однозначное представление для списка каталогов (следите за злыми символами в именах файлов), а затем вычисляйте и хэшировать это каждый раз. Вам также нужно подумать о том, как вы будете обрабатывать специальные файлы (сокеты, каналы, устройства и символические ссылки в мире Unix; NTFS имеет файловые потоки, и я считаю, что это что-то похожее на символические ссылки).