This commit is contained in:
Luk
2026-04-27 20:16:56 +08:00
parent bde475b433
commit 632b965357
16 changed files with 148 additions and 64 deletions

View File

@@ -7,8 +7,8 @@ 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;
base_dir=$(realpath "$base_dir")
echo Searching in "$base_dir";
else
echo not a folder!
exit 0
@@ -18,41 +18,43 @@ fi;
read -p "Please enter [prod] to rename, or [anything else] to dry run: " user_input
# 遍历所有目录
for dir in "$base_dir"/*/; do
find "$base_dir" -type d | while read -r fullpath; do
# 提取目录名称,去掉末尾的斜杠
dir_name=$(basename "$dir")
dir_name=$(dirname "$fullpath")
folder_name=$(basename "$fullpath")
# 调试输出:检查目录名称
echo "Processing: $dir_name"
#echo "Processing: $folder_name"
# 使用正则表达式提取前缀(可选)、年份、月份和日期
if [[ $dir_name =~ ^([^,]*),?\ ([0-9]{4})([0-9]{1,2})([0-9]{1,2})日$ ]]; then
if [[ $folder_name =~ ^([^,]*),?\ ([0-9]{4})([0-9]{1,2})([0-9]{1,2})日$ ]]; then
# 有前缀的情况
prefix="${BASH_REMATCH[1]}"
intro="${BASH_REMATCH[1]}"
year="${BASH_REMATCH[2]}"
month=$(printf "%02d" "${BASH_REMATCH[3]}")
day=$(printf "%02d" "${BASH_REMATCH[4]}")
month=$(printf "%02d\n" "$((10#${BASH_REMATCH[3]}))")
day=$(printf "%02d\n" "$((10#${BASH_REMATCH[4]}))")
elif [[ $dir_name =~ ^([0-9]{4})([0-9]{1,2})([0-9]{1,2})日$ ]]; then
elif [[ $folder_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]}")
month=$(printf "%02d\n" "$((10#${BASH_REMATCH[2]}))")
day=$(printf "%02d\n" "$((10#${BASH_REMATCH[3]}))")
intro="${BASH_REMATCH[4]}"
else
echo "Skipping: $dir_name (not matching expected format)"
echo "Skip: $folder_name"
continue
fi
# 创建新的目录名称
new_name="${year}${month}${day}"
if [[ -n "$prefix" ]]; then
new_name="${new_name}_${prefix// /_}" # 替换空格为下划线
if [[ -n "$intro" ]]; then
new_name="${new_name}_${intro// /_}" # 替换空格为下划线
fi
# 重命名目录
if [[ "$user_input" == "prod" ]]; then mv "$dir" "$base_dir/$new_name"; fi;
echo "Renamed: $dir_name -> $new_name"
if [[ "$user_input" == "prod" ]]; then mv "$fullpath" "$dir_name/$new_name"; fi;
echo "Renamed: $folder_name"
echo " >>>> $dir_name/$new_name"
done