分页: 1 / 1

求助一个批量重命名的问题

发表于 : 2022-05-17 15:40
chinaz
班主任提供一份学生名单a
学生根据a名单排队站好,依次拍照。
照片从相机里面倒出来是根据相机里面的命名规则按顺序排列的(如:IMG_1314.JPG、IMG_1315.JPG......)。
要求将照片重命名为学生本人的名字,如张三.JPG、李四.JPG.......
怎样使用shell指令将a文件里面的名字按顺序赋给相片文件?
请高手给支个招,谢谢!

Re: 求助一个批量重命名的问题

发表于 : 2022-05-17 15:54
lilydjwg
假定文件名里不含空格等特殊字符。

代码: 全选

ls *.JPG > b # 因为是相机导出的照片,这里顺序应该不会有问题
for name file in $(paste a b); do
  echo mv $file $name.jpg
done > cmds.sh
以上生成一个叫 cmds.sh 的脚本文件。检查没有问题之后,用 bash cmds.sh 执行它。

Re: 求助一个批量重命名的问题

发表于 : 2022-05-17 16:16
xingyao
可以用WPS实现批量改文件名,教程如下:https://blog.csdn.net/weixin_29190573/a ... /112315273

Re: 求助一个批量重命名的问题

发表于 : 2022-05-17 16:17
chinaz
lilydjwg 写了: 2022-05-17 15:54 假定文件名里不含空格等特殊字符。

代码: 全选

ls *.JPG > b # 因为是相机导出的照片,这里顺序应该不会有问题
for name file in $(paste a b); do
  echo mv $file $name.jpg
done > cmds.sh
以上生成一个叫 cmds.sh 的脚本文件。检查没有问题之后,用 bash cmds.sh 执行它。
感谢帮忙,脚本运行提示错误:

./rename:行2: 未预期的符号“file”附近有语法错误
./rename:行2: `for name file in $(paste a b); do'

这里提示错误,麻烦看看应该怎么做?

Re: 求助一个批量重命名的问题

发表于 : 2022-05-17 16:30
lilydjwg
啊,bash 的 for 不支持多个变量。那你用 zsh 跑吧……

Re: 求助一个批量重命名的问题

发表于 : 2022-05-17 16:31
lilydjwg
其实我想说用 Vim 来着,但是楼主可能也不会用 Vim。

Re: 求助一个批量重命名的问题

发表于 : 2022-05-17 16:44
chinaz
安装zsh后再执行,就搞定了,很简单,谢谢帮忙!
不过还是出错,需要稍微改一下才正常:

ls *.JPG > b
for name file in $(paste a b); do
mv $file $name.JPG
done

另WPS那个方案太过复杂,不过还是谢谢了~

Re: 求助一个批量重命名的问题

发表于 : 2022-05-24 23:55
sxgpic
ls 加上 -v 参数,才会按照自然数顺序排列。不加会这样排的哦: 1 10 11 ... 2 20 21 ...

Re: 求助一个批量重命名的问题

发表于 : 2022-05-25 13:47
chinaz
sxgpic 写了: 2022-05-24 23:55 ls 加上 -v 参数,才会按照自然数顺序排列。不加会这样排的哦: 1 10 11 ... 2 20 21 ...
谢谢,明白了一个困扰很久的问题。。。