我有一个 zip 文件。我将其解压并修改了一些文件。如何列出它们?

我有一个 zip 文件。我将其解压并修改了一些文件。如何列出它们?

基本上,我想做一个比较,并在文件夹中递归列出二进制更改的文件。我想避免使文件系统混乱,所以我认为这涉及一些管道。

我搜索了一些例子但每个人都在寻找 zip-to-zip 差异。


实际用例是更新 Web 应用程序:我想使用当前版本setup-v1.23.zip文件列出要备份的自定义文件,然后用setup-v1.75.zip原始供应商的较新文件的内容覆盖文件夹。

我将使用 PHPshell_exec()执行脚本文件并读取结果列表以进行进一步处理。

答案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直接使用 执行相同操作,而无需调用 shell。您可以php在 stackoverflow.com 上寻求帮助。

相关内容