62 lines
1.8 KiB
Bash
Executable File
62 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
||
# 从 Windows 服务器同步凭证照片到本地 input 目录
|
||
# Windows 路径: D:\beifen\会计工具\
|
||
# 本地路径: ~/projects/kocr/input/
|
||
|
||
WIN_HOST="administrator@192.168.123.11"
|
||
WIN_PATH="/D:/beifen/会计工具/"
|
||
LOCAL_PATH="$HOME/projects/kocr/input"
|
||
SSH_PASS="xue.2538"
|
||
|
||
# 已处理的文件记录
|
||
SEEN_FILE="$HOME/projects/kocr/.synced_files.txt"
|
||
touch "$SEEN_FILE"
|
||
|
||
# SSH 连接超时 10 秒,避免卡住
|
||
SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=10 -o BatchMode=yes"
|
||
|
||
# 列出服务器上的文件(用 cmd.exe,避免 PowerShell 路径 quoting 问题)
|
||
SERVER_FILES=$(sshpass -p "$SSH_PASS" ssh $SSH_OPTS "$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 -o StrictHostKeyChecking=no -o ConnectTimeout=10 "$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
|