DSM的相册应用文件存储路径问题

@zgcwkj  2025年07月13日

分类:

代码 其它 

去除 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 "删除操作完成。"


评论已关闭

Top