У меня есть zip-файл. Я извлек его и изменил некоторые файлы. Как я перечисляю их?

В основном я хотел бы сделать разность и перечислить измененные на двоичный файл файлы рекурсивно в папке. Я не хочу создавать помехи файловой системе, таким образом, я думаю, что это включает некоторую передачу по каналу.

Я искал некоторые примеры, но все ищут различный от zip к zip.


Реальный вариант использования для обновления веб-приложения: Я хочу использовать текущую версию setup-v1.23.zip файл для списка настроенных файлов, которые будут скопированы прежде, чем перезаписать папку с содержанием более нового setup-v1.75.zip файл от исходного поставщика.

Я буду использовать PHP's shell_exec() выполнить файл сценария и прочитать получающийся список для последующей обработки.

1
задан 5 November 2019 в 13:06

1 ответ

Можно выдержать сравнение эти 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.

0
ответ дан 7 December 2019 в 18:14

Другие вопросы по тегам:

Похожие вопросы: