将文件夹中的所有文件重命名为编号列表1.jpg、2.jpg等。

10

我有一个包含多个名称随机的图像文件的文件夹,为了整理这个混乱的文件夹,我想用一个命令将它们全部重命名为连续的顺序,所以如果我有100个文件,它会从第一个文件开始以file-1.jpg file-2.jpg等方式命名。有没有可能用一个命令完成这个操作?


1
如果我知道如何编写一个 shell 脚本来完成这个任务,我可能已经这样做了 haha。 - Yamaha32088
那么现在学习编程听起来是个好时机! - user1231232141214124
尝试自己编写代码,如果不行,可以把它带给我们,我们来协助你。你开始编写,我们来帮忙。我们不会替你完成代码。请向我们展示你已经尝试过的实际代码,然后我们会从那里开始帮助你。如果你先自己尝试,很可能就会接近答案。 - Andy Lester
2个回答

63

我能够想到的最简洁的命令行是

ls | cat -n | while read n f; do mv "$f" "file-$n.jpg"; done

ls列出当前目录下的文件,cat -n添加行号。 while循环按行读取结果编号的文件列表,将行号存储在变量n中,将文件名存储在变量f中,并执行重命名操作。


1
谢谢!这应该被标记为答案。 - Binil Jacob
1
小心,如果有一个名为“file-$n.jpg”的文件,它将被覆盖!因此,文件可能会丢失。 - Yuriy Chernyshov
使用“|”和“;”有什么区别?此外,n和f是如何填充的?我不理解这个概念。 - Tak
@Tak 你在询问关于shell脚本的基础知识。我猜我无法在一个SO评论中教给你一门复杂的编程语言 :) 所以我建议你先阅读一些shell脚本教程。 - Sven Marnach
@SvenMarnach,你能发个链接给我开始吗? :) - Tak
@Tak 我不知道有没有好的,而且这也取决于你的目标和先前的知识。只需在谷歌上搜索并选择一个即可。(我大部分是从“bash”和“dash”手册中学到的,这些手册相当特殊,因此我不建议模仿这种学习POSIX shell的方式。) - Sven Marnach

7

我通过编写一个bash脚本成功解决了我的问题。

#!/bin/sh
num=1
for file in *.jpg; do
       mv "$file" "$(printf "%u" $num).jpg"
       let num=$num+1
done

2
sh 没有 let。这让我浪费了 2 小时的工作时间。正确的应该是 #!/bin/bash - CBeTJlu4ok
1
对我来说一样。我需要加上 #!/bin/bash。 - desmond13
如果安全起见,将“mv”更改为“cp”,然后删除我们不需要的文件。 - Sridhar Thiagarajan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接