В основном я хотел бы сделать разность и перечислить измененные на двоичный файл файлы рекурсивно в папке. Я не хочу создавать помехи файловой системе, таким образом, я думаю, что это включает некоторую передачу по каналу.
Я искал некоторые примеры, но все ищут различный от zip к zip.
Реальный вариант использования для обновления веб-приложения: Я хочу использовать текущую версию setup-v1.23.zip
файл для списка настроенных файлов, которые будут скопированы прежде, чем перезаписать папку с содержанием более нового setup-v1.75.zip
файл от исходного поставщика.
Я буду использовать PHP's shell_exec()
выполнить файл сценария и прочитать получающийся список для последующей обработки.
Можно выдержать сравнение эти crc32
контрольные суммы:
#!/bin/bash
target_dir="/path/to/target/"
archive="/path/to/archive.zip"
# Loop through files in archive
while IFS= read -r filename; do
# Check if file exists in target:
[ -f "${target_dir}/${filename}" ] || { echo "new: '$filename'"; continue; }
# Get CRC32 Checksum from target
crc_in_target=$(crc32 "${target_dir}/${filename}")
# Get CRC32 Checksum from zip
crc_in_zip=$(unzip -vqq a.zip "$filename" | awk '{print $7}')
# Compare Checksums
[ "$crc_in_target" = "$crc_in_zip" ] || echo "changed: '$filename'"
done < <(unzip -Z -1 "$archive")
Примечание: Это могло бы иметь проблемы, когда имена файлов содержат символ новой строки.
ну, я вполне уверен, можно сделать то же с php
непосредственно, не называя оболочку. Можно обратиться за помощью с php
по stackoverflow.com.