如何在Azure Storage AzCopy Sync中过滤同步的空文件?
过滤空文件的AzCopy同步方案
核心思路
AzCopy本身没有直接跳过空文件的内置参数,因此通过Shell脚本先筛选出符合命名规则且大小大于0的有效文件,再生成文件列表供AzCopy同步时调用,以此实现空文件过滤。
具体实现步骤
1. 生成有效文件列表
在源目录下筛选出文件名匹配PPP*.*.pgp且非空的文件,生成临时列表文件:
find "/sftp/sourceFolder" -maxdepth 1 -type f -name "PPP*.*.pgp" ! -size 0 > /tmp/valid_files.txt
参数说明:
-maxdepth 1:匹配你当前--recursive=false的需求,仅扫描源目录本身,不遍历子文件夹-type f:仅筛选普通文件,排除目录等其他类型! -size 0:排除大小为0字节的空文件
2. 基于文件列表执行同步
使用AzCopy的--list-of-files参数指定刚才生成的有效文件列表,执行同步:
./azcopy sync "/sftp/sourceFolder" "https://mypersonal.blob.core.windows.net/payment" --recursive=false --list-of-files=/tmp/valid_files.txt
注意:这里无需再添加
--include参数,因为文件列表已经完成了规则匹配。
3. 清理临时文件(可选)
同步完成后删除临时列表文件,避免冗余:
rm /tmp/valid_files.txt
整合为一键执行脚本
将上述步骤封装为Shell脚本,方便日常调用:
#!/bin/bash # 定义固定参数 SOURCE_DIR="/sftp/sourceFolder" DEST_URL="https://mypersonal.blob.core.windows.net/payment" FILE_PATTERN="PPP*.*.pgp" TEMP_LIST="/tmp/valid_files.txt" # 生成非空符合规则的文件列表 find "$SOURCE_DIR" -maxdepth 1 -type f -name "$FILE_PATTERN" ! -size 0 > "$TEMP_LIST" # 执行AzCopy同步 ./azcopy sync "$SOURCE_DIR" "$DEST_URL" --recursive=false --list-of-files="$TEMP_LIST" # 清理临时文件 rm "$TEMP_LIST"
给脚本添加执行权限后即可直接运行:
chmod +x sync_non_empty_files.sh ./sync_non_empty_files.sh
注意事项
- 如果你的AzCopy需要额外身份验证参数(如SAS Token、OAuth令牌),直接追加到AzCopy命令末尾即可
- 临时文件路径可根据系统权限调整,确保脚本有读写权限
- 若需保留临时文件用于排查问题,可删除脚本最后一行的
rm命令
内容的提问来源于stack exchange,提问作者jarvo69
相关产品推荐
相关产品推荐

