批量使用不同的扩展名重命名多个文件Linux脚本?

我想编写一个linux脚本,将所有这些文件的文件名(但扩展名不同)的所有文件移动或复制到一个新的文件名,同时保持不同的扩展名。 换一种说法:

如果我从一个目录列表开始:

file1.txt, file1.jpg, file1.doc, file12.txt, file12.jpg, file12.doc

我想编写一个脚本来更改所有文件名而不更改扩展名。 对于同样的例子,selectfile2作为新文件名的结果是:

file2.txt, file2.jpg and file2.doc, file12.txt, file12.jpg, file12.doc

所以文件名不符合当前标准的文件将不会被修改。

最好的祝愿,

乔治

注意:如果变量ifile1.doc ,则表达式${i##*.}在这种情况下提取扩展名即doc


一行解决方案:

 for i in file1.*; do mv "$i" "file2.${i##*.}"; done 

脚本:

 #!/bin/sh # first argument - basename of files to be moved # second arguments - basename of destination files if [ $# -ne 2 ]; then echo "Two arguments required." exit; fi for i in $1.*; do if [ -e "$i" ]; then mv "$i" "$2.${i##*.}" echo "$i to $2.${i##*.}"; fi done 

util-linux-ng软件包(大多数Linux版本都默认安装了)包含命令“rename”。 请参阅man rename使用说明。 使用它你的任务可以做到这一点

rename file1 file2 file1.*

要处理其基名包含特殊字符的输入文件,我将修改plesiv的脚本为以下内容:

 if [ $# -ne 2 ]; then echo "Two arguments required." exit; fi for i in "$1".*; do if [ -e "$i" ]; then mv "$i" "$2.${i##*.}" echo "$i to $2.${i##*.}"; fi done 

请注意$ 1附近的额外引号。