xiaowei-system/scripts/sync_vouchers.sh

59 lines
1.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 从 Windows 服务器同步凭证照片到本地 input 目录
# Windows 路径: D:\beifen\会计工具\
# 本地路径: ~/mc/会计工具/input/
WIN_HOST="administrator@192.168.123.11"
WIN_PATH="/D:/beifen/会计工具/"
LOCAL_PATH="$HOME/mc/会计工具/input"
SSH_PASS="xue.2538"
# 已处理的文件记录
SEEN_FILE="$HOME/mc/会计工具/.synced_files.txt"
touch "$SEEN_FILE"
# 列出服务器上的文件(用 cmd.exe避免 PowerShell 路径 quoting 问题)
SERVER_FILES=$(sshpass -p "$SSH_PASS" ssh "$WIN_HOST" "cmd.exe /c dir D:\\beifen\\会计工具\\*.jpg /b D:\\beifen\\会计工具\\*.png /b D:\\beifen\\会计工具\\*.jpeg /b D:\\beifen\\会计工具\\*.webp /b 2>nul" 2>/dev/null)
# 无声模式:没新文件就不输出任何内容(配合 cron no_agent 使用)
if [ -z "$SERVER_FILES" ]; then
exit 0
fi
NEW_COUNT=0
TOTAL_COUNT=0
while IFS= read -r FILENAME; do
[ -z "$FILENAME" ] && continue
# 去掉 Windows 的 \r 换行符
FILENAME="${FILENAME//$'\r'/}"
[ -z "$FILENAME" ] && continue
# 只处理图片文件
case "${FILENAME,,}" in
*.jpg|*.jpeg|*.png|*.bmp|*.tiff|*.tif|*.webp) ;;
*) continue ;;
esac
TOTAL_COUNT=$((TOTAL_COUNT + 1))
# 检查是否已同步
if grep -qxF "$FILENAME" "$SEEN_FILE" 2>/dev/null; then
continue
fi
sshpass -p "$SSH_PASS" scp "$WIN_HOST:${WIN_PATH}${FILENAME}" "$LOCAL_PATH/" 2>/dev/null
if [ $? -eq 0 ]; then
echo "$FILENAME" >> "$SEEN_FILE"
NEW_COUNT=$((NEW_COUNT + 1))
fi
done <<< "$SERVER_FILES"
if [ $NEW_COUNT -gt 0 ]; then
echo "✅ 同步完成: $NEW_COUNT 张新照片"
fi