我需要重命名超过1500 * .jpg的文件。 我有文件名,文件名列表有2列,标签分隔:
旧文件名 - 新文件名
我如何检查第一列和旧文件名的前4位数字并重命名为2列中的另外4位数字?
//对不起我的英文
答案 0 :(得分: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
,因此脚本会输出错误。
答案 1 :(得分:2)
尝试此操作,并在验证完所需后删除回声。 changefile
是包含更改的文件的名称
while read from to; do
echo "mv ${from}* $to"
done < changefile
您应该反转订单更改文件,以确保在130之前和之前的13之前应用1306
答案 2 :(得分:1)
我已经在另一个问题上发布了这个答案,但是这个问题在问题,关键字和复杂性方面似乎更相关,我也会在这里添加它。
您可以在启用javascript插件的情况下使用小型Linux应用程序名称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()]
您可以在上面的代码前面加上$
,以保留原始文件名并将其添加到文件中。您可以使用“功能”按钮进行进一步的实验。