我需要重命名1500 *.jpg文件。我有带有2列的文件名列表的文本文件,选项卡分隔:
- 1305 1979
- 1310 173
- 1311 172
旧文件名 - 新文件名
- 1305_1.jpg -1979
- 1310_main_origin.jpg -173
- 1311_2.jpg -172
我如何检查第一列和旧文件名的第一个数字,然后从2列重命名为4位数字?
//对不起我的英语
使用循环,如下所示:
while read -r old new
do
arr=( ${old}_*.jpg )
if (( ${#arr[@]} == 1 ))
then
mv "${arr[0]}" "$new.jpg"
else
echo "Error: Multiple files found for $old: ${arr[@]}"
fi
done < file
请注意,有安全检查以确保您没有具有相同前缀的多个文件。例如,如果您具有1305_1.jpg
和1305_2.jpg
,则不能将它们都重命名为1979.jpg
,因此脚本将打印一个错误。
尝试一下,然后验证它是您想要的。 changefile
是包含更改
while read from to; do
echo "mv ${from}* $to"
done < changefile
您应该逆转订单更换file,以确保在130之前和130岁以前使用1306
我已经为另一个问题发布了这个答案,但是就问题,关键字和复杂性而言,这个问题似乎更相关,我也会在这里添加。
您可以使用Small Linux App Name Krename,并打开JavaScript插件。这是一个具有非常强大的重命名功能的免费工具。
- 安装krename并打开它
- 添加文件
-
转到插件选项卡并将您的JavaScript函数添加到功能定义部分,类似的内容:
var files = [ "Mickey", "Donald", "Duffy" ]; function rename(){ // krename_index is one of many special variables which can be added via ui return files[krename_index]; }
这是一个简单的脚本,可以完成工作,但是它可以随心所欲。
-
转到文件名选项卡,然后在模板输入中调用您的功能,如下所示:
[js; rename()]
您可以将上述代码与$
前缀以保持原始文件名并添加到它。您可以使用"功能"按钮进一步实验。
- 预览新名称并通过单击完成按钮进行完整重命名。