去除 Synology Photos 的文件存储路径年月日问题(通过脚本批量移动文件)
操作重要数据时,请备份好数据
移动文件脚本
flatten_dirs.sh
#!/bin/bash
# 请根据您的实际情况修改下面的两个变量
# 1. 源目录:包含 '年' 文件夹的顶级目录
# 根据您的截图,这里应该是 Camera 文件夹的完整路径
SOURCE_DIR="/volume1/homes/zgcwkj/Photos/PhotoLibrary/DCIM/Screenshots"
# 2. 目标目录:您希望将所有文件移动到哪里
# 这个目录如果不存在,脚本会自动创建
DEST_DIR="/volume1/homes/zgcwkj/Photos/PhotoLibrary/DCIM/Screenshots2"
# 特别说明:源目录和目标目录不要相同
# 检查源目录是否存在
if [ ! -d "$SOURCE_DIR" ]; then
echo "错误:源目录 '$SOURCE_DIR' 不存在。"
exit 1
fi
# 创建目标目录(如果它还不存在的话)
mkdir -p "$DEST_DIR"
echo "所有文件将被移动到: $DEST_DIR"
echo "---"
# 查找所有文件并开始处理
find "$SOURCE_DIR" -type f | while read -r file_path; do
# 获取不包含路径的原始文件名
# 例如:"DSC00224.JPG"
base_name=$(basename "$file_path")
# 构建完整的目标路径
dest_file_path="$DEST_DIR/$base_name"
# 【核心安全检查】
# 检查目标文件夹中是否已存在同名文件
if [ -e "$dest_file_path" ]; then
# 如果存在,则打印警告并跳过此文件,防止覆盖
echo "警告:跳过 '$file_path',因为目标位置已存在同名文件 '$base_name'"
continue # 继续处理下一个文件
fi
# --- 核心操作:移动文件 ---
#
# 【演练模式】默认启用。只打印命令,不执行。
#echo "准备移动: '$file_path' -> '$dest_file_path'"
# 【执行模式】确认演练结果无误后,注释掉上面的 echo 命令,
# 并取消下面 mv 命令的注释,然后重新运行脚本。
#mv "$file_path" "$dest_file_path"
done
echo "---"
echo "文件移动(演练)完成。"
echo
删除缓存脚本
cleanup_synology_files.sh
#!/bin/bash
# 请根据您的实际情况修改下面的变量
# 要清理的目录
SOURCE_DIR="/volume1/homes/zgcwkj/Photos/PhotoLibrary"
# 检查源目录是否存在
if [ ! -d "$SOURCE_DIR" ]; then
echo "错误:源目录 '$SOURCE_DIR' 不存在。"
exit 1
fi
echo "将在目录 '$SOURCE_DIR' 中查找并删除所有名称含有 '@SynoEAStream' 的文件和文件夹。"
echo "---"
# 核心操作:查找并删除
# 【演练模式】默认启用。只打印将要删除的文件/文件夹列表,不执行任何操作。
echo "【演练模式】以下文件或文件夹将被删除:"
find "$SOURCE_DIR" -name "*@SynoEAStream*" -print
echo "---"
echo "演练完成。请检查以上列表是否正确。"
# # 【执行模式】确认演练结果无误后,启用下面的代码来真正执行删除。
# # 注意:删除操作是不可逆的!
# echo "---"
# echo "【执行模式】正在删除,请稍候..."
# # -exec rm -rf {} + 是一个安全且高效的删除方式,可以处理文件和文件夹
# find "$SOURCE_DIR" -name "*@SynoEAStream*" -exec rm -rf {} +
# echo "删除操作完成。"
评论已关闭