AGENTS.md:使用脚本固化工作区文件操作流程
This commit is contained in:
Executable
+207
@@ -0,0 +1,207 @@
|
||||
#!/bin/bash
|
||||
# 工作区文件操作脚本
|
||||
# 用法:
|
||||
# zq-file.sh edit <文件路径> # 编辑文件(使用默认编辑器)
|
||||
# zq-file.sh write <文件路径> <内容> # 写入/覆盖文件
|
||||
# zq-file.sh append <文件路径> <内容> # 追加内容到文件
|
||||
# zq-file.sh delete <文件路径> # 删除文件
|
||||
# zq-file.sh new <文件路径> <内容> # 新建文件
|
||||
#
|
||||
# 脚本会自动执行:
|
||||
# 1. 从NAS同步到本地
|
||||
# 2. 执行操作
|
||||
# 3. Git提交
|
||||
# 4. 同步到NAS
|
||||
|
||||
set -e
|
||||
|
||||
ZQ_DIR="$HOME/work/zq"
|
||||
NAS_REMOTE="nas-webdav:/home/Drive/工作区/张青/工作区/"
|
||||
EXCLUDE_ARGS="--exclude .git/ --exclude .gitignore"
|
||||
LOG_FILE="$HOME/work/zq-file.log"
|
||||
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat << EOF
|
||||
工作区文件操作脚本
|
||||
|
||||
用法:
|
||||
$0 edit <文件路径> 使用编辑器编辑文件
|
||||
$0 write <文件路径> <内容> 写入/覆盖文件
|
||||
$0 append <文件路径> <内容> 追加内容到文件末尾
|
||||
$0 delete <文件路径> 删除文件
|
||||
$0 new <文件路径> <内容> 新建文件
|
||||
|
||||
注意:
|
||||
- 文件路径是相对于 ~/work/zq 的路径,或绝对路径
|
||||
- 内容会通过 stdin 传入,支持多行
|
||||
- 操作会自动:从NAS同步 → 执行操作 → Git提交 → 同步到NAS
|
||||
|
||||
示例:
|
||||
# 编辑文件
|
||||
$0 edit 10.项目/README.md
|
||||
|
||||
# 写入内容
|
||||
echo "Hello World" | $0 write 00.收件箱/test.md
|
||||
$0 write 00.收件箱/test.md "Hello World"
|
||||
|
||||
# 追加内容
|
||||
$0 append 00.收件箱/01-速记本.md "- 新的速记"
|
||||
|
||||
# 删除文件
|
||||
$0 delete 40.归档/old-file.md
|
||||
|
||||
# 新建文件
|
||||
$0 new 30.资源/new-note.md "# 新笔记"
|
||||
EOF
|
||||
}
|
||||
|
||||
# 确保在正确目录
|
||||
cd "$ZQ_DIR" || { log "错误:无法进入 $ZQ_DIR"; exit 1; }
|
||||
|
||||
# 解析参数
|
||||
ACTION="$1"
|
||||
shift || { usage; exit 1; }
|
||||
|
||||
# 处理文件路径(支持相对路径和绝对路径)
|
||||
resolve_path() {
|
||||
local path="$1"
|
||||
if [[ "$path" = /* ]]; then
|
||||
# 绝对路径
|
||||
echo "$path"
|
||||
else
|
||||
# 相对路径,基于 ~/work/zq
|
||||
echo "$ZQ_DIR/$path"
|
||||
fi
|
||||
}
|
||||
|
||||
# 从NAS同步到本地
|
||||
sync_from_nas() {
|
||||
log "步骤1: 从NAS同步到本地..."
|
||||
rclone sync "$NAS_REMOTE" "$ZQ_DIR/" $EXCLUDE_ARGS --log-level INFO >> "$LOG_FILE" 2>&1 || {
|
||||
log "警告:从NAS同步失败,继续执行..."
|
||||
}
|
||||
log "同步完成"
|
||||
}
|
||||
|
||||
# Git提交
|
||||
git_commit() {
|
||||
local message="$1"
|
||||
log "步骤3: Git提交..."
|
||||
git add -A >> "$LOG_FILE" 2>&1
|
||||
git commit -m "$message" >> "$LOG_FILE" 2>&1 || log "没有变更需要提交"
|
||||
git push origin main >> "$LOG_FILE" 2>&1 || log "警告:Git push失败"
|
||||
}
|
||||
|
||||
# 同步到NAS
|
||||
sync_to_nas() {
|
||||
log "步骤4: 同步到NAS..."
|
||||
rclone sync "$ZQ_DIR/" "$NAS_REMOTE" $EXCLUDE_ARGS --log-level INFO >> "$LOG_FILE" 2>&1 || {
|
||||
log "错误:同步到NAS失败"
|
||||
exit 1
|
||||
}
|
||||
log "同步完成"
|
||||
}
|
||||
|
||||
# 执行操作
|
||||
case "$ACTION" in
|
||||
edit)
|
||||
FILE_PATH=$(resolve_path "$1")
|
||||
REL_PATH="${FILE_PATH#$ZQ_DIR/}"
|
||||
|
||||
sync_from_nas
|
||||
|
||||
log "步骤2: 编辑文件 $REL_PATH"
|
||||
${EDITOR:-nano} "$FILE_PATH"
|
||||
|
||||
git_commit "编辑: $REL_PATH"
|
||||
sync_to_nas
|
||||
log "完成!"
|
||||
;;
|
||||
|
||||
write)
|
||||
FILE_PATH=$(resolve_path "$1")
|
||||
REL_PATH="${FILE_PATH#$ZQ_DIR/}"
|
||||
CONTENT="${2:-$(cat)}"
|
||||
|
||||
sync_from_nas
|
||||
|
||||
log "步骤2: 写入文件 $REL_PATH"
|
||||
mkdir -p "$(dirname "$FILE_PATH")"
|
||||
echo "$CONTENT" > "$FILE_PATH"
|
||||
|
||||
git_commit "写入: $REL_PATH"
|
||||
sync_to_nas
|
||||
log "完成!"
|
||||
;;
|
||||
|
||||
append)
|
||||
FILE_PATH=$(resolve_path "$1")
|
||||
REL_PATH="${FILE_PATH#$ZQ_DIR/}"
|
||||
CONTENT="${2:-$(cat)}"
|
||||
|
||||
sync_from_nas
|
||||
|
||||
log "步骤2: 追加到文件 $REL_PATH"
|
||||
if [[ ! -f "$FILE_PATH" ]]; then
|
||||
log "错误:文件不存在"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "\n$CONTENT" >> "$FILE_PATH"
|
||||
|
||||
git_commit "追加: $REL_PATH"
|
||||
sync_to_nas
|
||||
log "完成!"
|
||||
;;
|
||||
|
||||
delete)
|
||||
FILE_PATH=$(resolve_path "$1")
|
||||
REL_PATH="${FILE_PATH#$ZQ_DIR/}"
|
||||
|
||||
sync_from_nas
|
||||
|
||||
log "步骤2: 删除文件 $REL_PATH"
|
||||
if [[ ! -f "$FILE_PATH" ]]; then
|
||||
log "错误:文件不存在"
|
||||
exit 1
|
||||
fi
|
||||
trash "$FILE_PATH" || rm "$FILE_PATH"
|
||||
|
||||
git_commit "删除: $REL_PATH"
|
||||
sync_to_nas
|
||||
log "完成!"
|
||||
;;
|
||||
|
||||
new)
|
||||
FILE_PATH=$(resolve_path "$1")
|
||||
REL_PATH="${FILE_PATH#$ZQ_DIR/}"
|
||||
CONTENT="${2:-$(cat)}"
|
||||
|
||||
sync_from_nas
|
||||
|
||||
log "步骤2: 新建文件 $REL_PATH"
|
||||
if [[ -f "$FILE_PATH" ]]; then
|
||||
log "错误:文件已存在"
|
||||
exit 1
|
||||
fi
|
||||
mkdir -p "$(dirname "$FILE_PATH")"
|
||||
echo "$CONTENT" > "$FILE_PATH"
|
||||
|
||||
git_commit "新建: $REL_PATH"
|
||||
sync_to_nas
|
||||
log "完成!"
|
||||
;;
|
||||
|
||||
-h|--help|help)
|
||||
usage
|
||||
;;
|
||||
|
||||
*)
|
||||
log "错误:未知操作 '$ACTION'"
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user