请稍侯

批量修改并裁剪当前目录下的所有文

25 November 2024

批量修改并裁剪当前目录下的所有文件名

以适应在Synology 群晖加密目录下文件名过长的问题, 通过脚本中的 SUFFIX 变量指定要改的文件的后缀类型

#!/bin/sh

# 定义文件名长度限制
LEN_LIMIT=42
SUFFIX=mp4

# 遍历当前目录下所有的 .mp4 文件
for file in *.$SUFFIX; do
    # 检查文件是否存在
    if [[ -e "$file" && -f "$file" ]]; then
        # 去掉文件名前后的空格
        trimmed_name=$(echo "$file" | xargs)

        # 将中间空格替换成下划线,并删除其他特殊符号
        sanitized_name=$(echo "$trimmed_name" | tr ' ' '_' | tr -d '|?')

        # 获取处理后的文件名长度
        filename_length=${#sanitized_name}

        # 检查长度是否超过限制
        if [[ $filename_length -gt $LEN_LIMIT ]]; then
            # 根据限制长度进行重命名
            new_name="${sanitized_name:0:$LEN_LIMIT}.$SUFFIX"
            mv "$file" "$new_name"
            echo mv "$file" "$new_name"
        else
            # 如果文件名没有超出限制,使用处理后的文件名
            mv "$file" "$sanitized_name"
            echo mv "$file" "$sanitized_name"
        fi
    fi
done

批量逆序文件前缀索引字符

# 写在一行里
for filename in *.mp4; do num=$(echo "$filename" | sed 's/\(^[0-9]*\).*/\1/'); if [[ "$num" =~ ^0 ]]; then num="${num#0}"; fi; index=$(printf "%03d" $((32 - ${num#0} + 1))); new_filename="${index} - ${filename#*\ -\ }"; echo mv "$PWD/$filename" "$PWD/$new_filename"; done

# 改srt
for filename in *.srt; do num=$(echo "$filename" | sed 's/\([0-9]*\).*/\1/'); if [[ "$num" =~ ^0 ]]; then num="${num#0}"; fi; index=$(printf "%03d" $((32 - ${num#0} + 1))); new_filename="${index} - ${filename#*\ -\ }"; echo mv "$PWD/$filename" "$PWD/$new_filename"; done