将文件名的第一部分移到文件扩展名之前的末尾

时间:2012-12-06 03:11:21

标签: regex linux shell rename

获得以下代码,从文件名开头删除1234-

rename -v "s/^1234-//g" *.***

输入:

1234-test1.test2.jpg

输出:

test1.test2.jpg

这段代码将-1234添加到文件名

的末尾
for file in *.jpg; do echo $(basename $file .jpg)-1234; done

输入:

test1.test2.jpg

输出:

test1.test2-1234.jpg

我正在寻找一种方法将这两个命令组合成一个单独的脚本,但是如果可能的话,还要以某种方式避免第二位代码在每次运行时继续添加-1234。

2 个答案:

答案 0 :(得分:0)

这假定所有文件都是.jpg

rename -v "s/^1234-(.+)(\.jpg)/$1-1234$2/" *.*

这匹配整个文件名,但捕获仅仅是{2}组之后的部分。 1234-$1区域反向引用捕获的部分。

答案 1 :(得分:0)

这就是它:

for file in *.jpg; do
   basename=${file%.*}               # Get the basename without using a subprocess.
   extension=${file##*.}             # Get the extension if you want to add *.JPG in the for, can be skipped if only *.jpg.

   newname=${basename#1234-}         # Remove "1234-" in front of basename.
   test "$basename" = "$newname" &&  # If basename did not start with "1234-", skip this file.
     continue  

   newname=${newname%-1234}          # Remove an eventual "-1234" at the end of newname.
   newname="${newname}-1234"         # Add "-1234" at the end of newname.
   newname="$newname.$extension"     # Restore extension.
   echo mv "$file" "$newname"        # echo rename command.
done

如果您对输出感到满意,请删除最后一行中的回声。