Files
app-api/scripts/reorganize_csv.sh
eafonyang 8c22be4e0a 优化
2026-06-05 14:03:34 +08:00

64 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
# 将 CSV 文件按首字符归档到子目录
# 用法: bash reorganize_csv.sh /data/project/autoeq/measurements/Eafonyoung/data/in-ear
# 支持预览模式: bash reorganize_csv.sh --dry-run /data/project/autoeq/measurements/Eafonyoung/data/in-ear
DRY_RUN=false
if [ "$1" = "--dry-run" ]; then
DRY_RUN=true
shift
fi
DIR="$1"
if [ -z "$DIR" ] || [ ! -d "$DIR" ]; then
echo "用法: $0 [--dry-run] <目录>"
echo "示例: $0 --dry-run /data/project/autoeq/measurements/Eafonyoung/data/in-ear"
exit 1
fi
count=0
skipped=0
# 强制使用 C locale 确保字符范围正确
export LC_ALL=C
for csv in "$DIR"/*.csv; do
[ -f "$csv" ] || continue
filename=$(basename "$csv")
first_char="${filename:0:1}"
# 小写字母转大写(使用 tr 确保兼容性)
if echo "$first_char" | grep -q '[a-z]'; then
subdir=$(echo "$first_char" | tr 'a-z' 'A-Z')
else
subdir="$first_char"
fi
target_dir="$DIR/$subdir"
target_path="$target_dir/$filename"
# 已经在正确位置的跳过
if [ -d "$target_dir" ] && [ "$csv" -ef "$target_path" ]; then
skipped=$((skipped + 1))
continue
fi
if [ "$DRY_RUN" = true ]; then
echo "[预览] $filename -> $subdir/$filename"
else
mkdir -p "$target_dir"
mv "$csv" "$target_path"
echo "[移动] $filename -> $subdir/$filename"
fi
count=$((count + 1))
done
if [ "$DRY_RUN" = true ]; then
echo "--- 预览完成,共 $count 个文件待移动,$skipped 个已跳过 ---"
else
echo "--- 完成,共移动 $count 个文件,$skipped 个已跳过 ---"
fi