编写一个简单的脚本,自动重命名一些文件。例如,我们希望将文件*001.jpg重命名为用户定义的字符串+ 001.jpg(例如:MyVacation20110725_001.jpg)。这个脚本的用途是让数码相机照片具有一些有意义的文件名。
我需要为此写一个shell脚本。谁能建议一下怎么开始?
编写一个简单的脚本,自动重命名一些文件。例如,我们希望将文件*001.jpg重命名为用户定义的字符串+ 001.jpg(例如:MyVacation20110725_001.jpg)。这个脚本的用途是让数码相机照片具有一些有意义的文件名。
我需要为此写一个shell脚本。谁能建议一下怎么开始?
当前回答
for file in *.jpg ; do mv $file ${file//IMG/myVacation} ; done
再次假设你所有的图像文件都有字符串“IMG”,你想用“myVacation”替换“IMG”。
使用bash,可以直接使用参数展开转换字符串。
例如:如果文件为IMG_327.jpg,则执行mv命令,就像执行mv IMG_327.jpg myVacation_327.jpg一样。这将对目录中匹配*.jpg的每个文件执行此操作。
myVacation_001.jpg myVacation_002.jpg myVacation_1023.jpg 等等……
其他回答
另一种选择是:
for i in *001.jpg
do
echo "mv $i yourstring${i#*001.jpg}"
done
删除回声后,你有它的权利。
使用#的参数替换将只保留最后一部分,因此您可以更改它的名称。
一个帮助你起步的例子。
for f in *.jpg; do mv "$f" "$(echo "$f" | sed s/IMG/VACATION/)"; done
在本例中,我假设所有图像文件都包含字符串IMG,并且希望用VACATION替换IMG。
shell自动将*.jpg转换为所有匹配的文件。
mv的第二个参数(文件的新名称)是sed命令的输出,该命令将IMG替换为VACATION。
如果您的文件名包含空格,请仔细注意“$f”符号。您需要使用双引号来保留空白。
在这个例子中,我假设你所有的图像文件都以“IMG”开头,你想用“VACATION”替换“IMG”
解决办法:先识别所有JPG文件,然后替换关键字
find . -name '*jpg' -exec bash -c 'echo mv $0 ${0/IMG/VACATION}' {} \;
for file in *.jpg ; do mv $file ${file//IMG/myVacation} ; done
再次假设你所有的图像文件都有字符串“IMG”,你想用“myVacation”替换“IMG”。
使用bash,可以直接使用参数展开转换字符串。
例如:如果文件为IMG_327.jpg,则执行mv命令,就像执行mv IMG_327.jpg myVacation_327.jpg一样。这将对目录中匹配*.jpg的每个文件执行此操作。
myVacation_001.jpg myVacation_002.jpg myVacation_1023.jpg 等等……
你可以试试这个:
for file in *.jpg;
do
mv $file $somestring_${file:((-7))}
done
你可以在man bash中看到“参数展开”来更好地理解上面的内容。