我在这个问题上遇到了困难。
我在一般名称格式的文件夹中有几个文件:
[ 文件类型 ] 文件名 ( 日期< / em> ) 文件规范 。 文件扩展名
我想写一个脚本,所以我可以将文件夹中的所有文件重命名为以下格式:
应丢弃日期 [ 文件类型 ] 文件名 。< / strong> 文件扩展名
()日期,日期应更改为格式ddmmyyyy,应保留文件类型周围的[],并忽略文件规范。
示例:
[Oral Talk] Prospects for future research (13_11_2017) 1080p 320kpbs.mp4
应改为:
13112017 [Oral Talk] Prospects for future research.mp4
但是,应该对文件夹中的所有文件进行迭代。
答案 0 :(得分:0)
#!/usr/bin/env bash
# use a regular expression with match groups to pick out pieces of the name
re='\[(.+)\] (.+) [(]([[:digit:]_]+)[)](.*)[.]([[:alnum:]]+)'
# 1 2 3 4 5
# if we were passed a directory name, change to it before running
if [[ $1 ]]; then cd -- "$1" || exit; fi
for name in *.*; do
if [[ $name =~ $re ]]; then
date=${BASH_REMATCH[3]}
ext=${BASH_REMATCH[5]}
type=${BASH_REMATCH[1]}
topic=${BASH_REMATCH[2]}
new_name="${date//_/} [$type] $topic.$ext"
printf 'Renaming %q to %q\n' "$name" "$new_name" >&2
[[ $dry_run ]] || mv -- "$name" "$new_name"
else
printf 'Filename %q does not match pattern; ignoring\n' "$name" >&2
fi
done
如果以renaming-script
名称保存并运行为:
dry_run=1 ./renaming-script directory-to-rename
...这只会打印一份报告,显示将重命名的内容。删除dry_run=1
后,它实际上会执行这些重命名操作。