我在一个目录中有一堆文件,我想将其重命名如下,例如现有名称:
1937 - Snow White and the Seven Dwarves.avi
1940 - Pinocchio.avi
目标名称:
Snow White and the Seven Dwarves (1937).avi
Pinocchio (1940).avi
干杯
答案1
如果您有基于 Perl 的rename
(有时称为prename
),这确实是可能的。如果您了解正则表达式,那就更简单了。
rename -n 's!^(\d+) - (.*)\.(...)$!$2 ($1).$3!' *.avi
其作用是将源文件名分成三个部分。使用你的第一个例子,这些将是
- 1937年
- 白雪公主和七个小矮人
- 视频
这些被分配到命令中的$1
, $2
, 。 (这些不是变量。)然后它以不同的顺序将它们重新组合在一起。$3
rename
bash
当您对建议的结果感到满意时,请将其更改为-n
,-v
甚至完全删除它。
答案2
这就是我仅使用 bash 的方式
cd movie_directory
ls -1 | while read line
do
year=$(echo ${line} | awk '{print $1}')
name=$(echo ${line} | cut -d " " -f 3- | cut -d"." -f 1)
ext=$(echo ${line} | cut -d " " -f 3- | cut -d"." -f 2)
newname=${name}" ("${year}")."${ext}
mv "${line}" "${newname}"
done
假设:
文件名不包含.
年份之间的空格字符,-
并且文件名实际上是空格,而不是空格tab
或其他不可打印的字符。