基本上,我想做一个比较,并在文件夹中递归列出二进制更改的文件。我想避免使文件系统混乱,所以我认为这涉及一些管道。
我搜索了一些例子但每个人都在寻找 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 上寻求帮助。