From bde475b43327ab4faad38f6c529debb6967b6383 Mon Sep 17 00:00:00 2001 From: Luk Date: Mon, 16 Mar 2026 14:16:16 +0800 Subject: [PATCH] u --- nixhome/.bash_profile | 4 --- nixhome/.bashrc | 10 ++++-- photo_rename_folders.sh | 58 +++++++++++++++++++++++++++++++++ photo_rename_images.sh | 71 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 137 insertions(+), 6 deletions(-) create mode 100644 photo_rename_folders.sh create mode 100644 photo_rename_images.sh diff --git a/nixhome/.bash_profile b/nixhome/.bash_profile index c6e44c3..203bc64 100644 --- a/nixhome/.bash_profile +++ b/nixhome/.bash_profile @@ -19,7 +19,3 @@ unset USERNAME ################################################################################ # End Of File: "~/.bash_profile" ################################################################################ - -# Added by OrbStack: command-line tools and integration -# This won't be added again if you remove it. -source ~/.orbstack/shell/init.bash 2>/dev/null || : diff --git a/nixhome/.bashrc b/nixhome/.bashrc index d697694..8de9c0f 100644 --- a/nixhome/.bashrc +++ b/nixhome/.bashrc @@ -133,7 +133,7 @@ fi MYIPPUB=$(curl -s ifconfig.me) if [ "$(uname)" = "Darwin" ]; then - PSTYLE=04 + PSTYLE=07 PTYPE=3 elif [ "$(whoami)" = "root" ]; then PSTYLE=07 @@ -186,13 +186,19 @@ fi # eval "$(fnm env --use-on-cd)" # fi -# acme.sh settings +# acme.sh if [ -f $HOME/.acme.sh/acme.sh.env ] then . "$HOME/.acme.sh/acme.sh.env" alias acme=$HOME/.acme.sh/acme.sh fi +# Added by OrbStack: command-line tools and integration +if [ "$(uname)" = "Darwin" ] && [ -f $HOME/.orbstack/shell/init.bash ] +then + source ~/.orbstack/shell/init.bash 2>/dev/null || : +fi + # let MacOS uses the same variable so that vscode-sshfs can use "$USERPROFILE/.ssh/id_rsa" uniformly. export USERPROFILE=$HOME diff --git a/photo_rename_folders.sh b/photo_rename_folders.sh new file mode 100644 index 0000000..85dd450 --- /dev/null +++ b/photo_rename_folders.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +# 指定目录 +if [ "$1" ]; then + base_dir=$1 +else + read -p "Please enter [root directory] to rename 1st level subfolders: " base_dir +fi +if [[ -d "$base_dir" ]]; then + base_dir=$(realpath $base_dir) + echo Searching in $base_dir; +else + echo not a folder! + exit 0 +fi; + +# Prompt user for input +read -p "Please enter [prod] to rename, or [anything else] to dry run: " user_input + +# 遍历所有目录 +for dir in "$base_dir"/*/; do + # 提取目录名称,去掉末尾的斜杠 + dir_name=$(basename "$dir") + + # 调试输出:检查目录名称 + echo "Processing: $dir_name" + + # 使用正则表达式提取前缀(可选)、年份、月份和日期 + if [[ $dir_name =~ ^([^,]*),?\ ([0-9]{4})年([0-9]{1,2})月([0-9]{1,2})日$ ]]; then + # 有前缀的情况 + prefix="${BASH_REMATCH[1]}" + year="${BASH_REMATCH[2]}" + month=$(printf "%02d" "${BASH_REMATCH[3]}") + day=$(printf "%02d" "${BASH_REMATCH[4]}") + + elif [[ $dir_name =~ ^([0-9]{4})年([0-9]{1,2})月([0-9]{1,2})日$ ]]; then + # 没有前缀的情况 + prefix="" + year="${BASH_REMATCH[1]}" + month=$(printf "%02d" "${BASH_REMATCH[2]}") + day=$(printf "%02d" "${BASH_REMATCH[3]}") + + else + echo "Skipping: $dir_name (not matching expected format)" + continue + fi + + # 创建新的目录名称 + new_name="${year}${month}${day}" + + if [[ -n "$prefix" ]]; then + new_name="${new_name}_${prefix// /_}" # 替换空格为下划线 + fi + + # 重命名目录 + if [[ "$user_input" == "prod" ]]; then mv "$dir" "$base_dir/$new_name"; fi; + echo "Renamed: $dir_name -> $new_name" +done \ No newline at end of file diff --git a/photo_rename_images.sh b/photo_rename_images.sh new file mode 100644 index 0000000..4a8e0c2 --- /dev/null +++ b/photo_rename_images.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +# 设置要处理的目录 +if [ "$1" ]; then + base_dir=$1 +else + read -p "Please enter [root directory] to rename images recursively: " target_directory +fi +if [[ -d "$target_directory" ]]; then + echo Searching in $(realpath $target_directory); +else + echo $target_directory is not a folder! + exit 0 +fi; + +# Prompt user for input +read -p "Please enter [prod] to rename, or [anything else] to dry run: " user_input + + +# 查找并遍历所有文件 +find "$target_directory" -type f | while read -r file; do + # 获取文件的原名和扩展名 + dir_name=$(dirname "$file") + base_name=$(basename "$file") + extension="${base_name##*.}" + + if [[ "$extension" = "7z" ]] || [[ "$extension" = "DS_Store" ]] || [[ "$extension" = "aae" ]] || [[ "$base_name" == *"unkn#own"* ]]; then + echo === Bypassing $base_name + elif [[ "$base_name" =~ ^\[?[0-9]{8}[-_][0-9]{6}\]? ]]; then + + #echo === Formatting $base_name + + # 删除文件名中的 [ 和 ],并将日期时间后的 - 或空格 替换为 # + new_name=$(echo "$base_name" | sed -E 's/\[?([0-9]{8})[-_]([0-9]{6})\]?[- ]/\1#\2_/g; s/\[?([0-9]{8})[-_]([0-9]{6})\]?/\1#\2/g; s/\[|\]//g') + + # 如果重命名后的文件名与原文件名不同,则进行重命名 + if [[ "$base_name" != "$new_name" ]]; then + if [[ "$user_input" == "prod" ]]; then mv "$file" "$dir_name/$new_name"; fi; + echo "$base_name -> $new_name" + fi + + elif [[ ! "$base_name" =~ ^[0-9]{8}#[0-9]{6} ]]; then + + #echo === Add datetime $base_name + + # 获取文件的拍摄日期,假设日期以EXIF元数据存储 + # 需要安装 exiftool + date_taken=$(exiftool -ExtractEmbedded -d "%Y%m%d#%H%M%S" -DateTimeOriginal -CreationDate -s -s -s "$file") + + # 检查日期是否为空和文件名格式 + if [ -n "$date_taken" ]; then + # 生成新的文件名 + new_name="${date_taken}_${base_name}" + + # 重命名文件 + if [[ "$user_input" == "prod" ]]; then mv "$file" "$dir_name/$new_name"; fi; + echo "$base_name -> $new_name" + else + new_name="unkn#own_${base_name}" + + # 重命名文件 + if [[ "$user_input" == "prod" ]]; then mv "$file" "$dir_name/$new_name"; fi; + echo "$base_name -> $new_name" + fi + + else + + echo === Unknown $base_name + + fi +done \ No newline at end of file