按特定顺序重命名图像


8

这是我的问题:我有一个包含500张图像的文件夹,名为:

1.jpg
2.jpg
3.jpg

等等..

我复制了该文件夹,现在我需要将相同的图片从501重命名为1000,但顺序如下:

1.jpg  becomes    501.jpg
2.jpg  becomes    502.jpg
3.jpg  becomes    503.jpg          
....

当我使用标准重命名命令时:

i=501;for img in $(find . -iname '*.jpg'); do echo -n "Converting $img"; mv $img $i.jpg  && echo $i && ((i++)); done

它从501到1000订购图像,但它们都是分散的:

23.jpg becomes 501.jpg,    
66.jpg becomes 502.jpg 
...   

(它们顺序正确,但将它们混合在一起)

我知道这可能是我丢失的一个命令...


使用2个变量i和j mv $ i.jpg $ j.jpg并增加变量。

谢谢,希望您能解决。我搜索了但没有找到答案
。– Painkiller

只是好奇,原始名称在什么范围内?是否应将原始号码重新命名为+ 500?
雅各布·弗利姆

是的,雅各布+500。我正在尝试写菩提告诉我的内容,但我对lnux不太满意,我自杀了,写下了上面的重命名命令:D
Painkiller

我可怜的笔记本电脑上有很多atm,但是如果没有令人满意的答案(我怀疑:)),并且如果您无法管理,我将在今晚发布一个小小的python脚本。
雅各布·弗利姆

Answers:


7

尝试使用Thunar,它是Xfce的默认文件管理器。它非常轻巧,并带有方便的批量重命名工具。您可以通过在终端中运行以下命令来安装Thunar:

sudo apt-get install thunar

您可能也可以从Ubuntu Software安装。

如何使用实用程序

  1. 安装Thunar后,启动Bulk Rename实用程序。
  2. 单击+图标,然后以正确的顺序添加要重命名的文件。
  3. 单击所选文件列表正下方的下拉框,然后选择编号。单击其旁边的框,然后选择“ 仅命名”
  4. 在“ 开始于: ”框中,输入501,将“ 文本: ”框保留为空。您应该在“ 新名称”列中看到更改的预览。
  5. 要应用更改,请单击“ 重命名文件”按钮。

除了编号外,该实用程序还支持以下操作:

  • 插入日期/时间
  • 插入/覆盖
  • 删除字符
  • 搜索和替换
  • 大写小写

谢谢您,您是MVP!我只需要补充一句,我还需要将“文本格式”更改为:“文本-数字”。(以防万一其他人使用它)
Painkiller

2
将fm切换为...执行一个简单的任务对我来说似乎有些矫kill过正。编写简单的nautilus脚本扩展名所需的时间比切换fm要少。
雅各布·弗利姆

1
@JacobVlijm我正在将Thunar和Nautilus一起用于批量重命名工具。Thunar非常轻巧,似乎与Nautilus或其他文件管理器没有任何冲突。
pomsky

4
如果您不希望使用第二个文件管理器,则pyrenamer可以完美地工作,这是当我希望GUI在输出之前/之后进行比较时,我用于批量重命名的功能。
汤姆·布鲁斯曼

13

find命令查找在“目录”命令文件(23.jpg66.jpg,...)。您可以|sort在找到之后放一个。

但是您的方法过于复杂。

for i in $( seq 1 500 ) ; do
    j=$(( $i + 500 ))
    mv $i.jpg $j.jpg
done 

3
for i in {1..500}; do ...会更容易。
大卫·佛斯特

11

rename命令。

rename -n 's/^(\d+)/sprintf("%d",$1+500)/e' *.jpg

或在纯bash且使用shell参数扩展

for FILE in *.jpg; do
    mv "$FILE" "$(( ${FILE%.jpg}+500 )).jpg" 
done 

5

如果我已正确理解您的要求,我认为您可以使用默认的重命名工具来做到这一点:

rename 's/^(\d+)/sprintf("%d",$1+500)/e' *.jpg -vn

-vn测试后,您应删除(详细-无操作)开关,以使更改生效。


如何在Ubuntu中安装此工具?默认情况下从不支持所有这些命令行选项的程序包rename链接到。prename(1)perl
大卫·佛斯特

@DavidFoerster您可能是对的。我找不到当前的安装链接(自2014年以来就没有使用过)。使用默认的重命名工具,我认为regex表达式应为's/^(\d+)/sprintf("%d",$1+500)/e'。我将相应地更新答案。谢谢。
sempaiscuba

1
您的答案现在与AFSHIN的重复。
大卫·佛斯特

@DavidFoerster对不起,什么答案?我能看到的唯一其他答案是pomsky&waltinator。都不使用重命名(两个版本)。
sempaiscuba

直接链接到我的意思是包含在我以前的评论中。
大卫·佛斯特

0

另一种通过shell命令实现此目标的方法

count = 1;因为我在ls; 做mv $ i CN $((count ++))。$ {i ## *。}; 做完了

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.