批量修改并裁剪当前目录下的所有文
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
