我有一堆图像,名为:
1.jpg
2.jpg
317.jpg
317 (2)a.jpg
etc.
在我的文件浏览器 (Nautilus) 中,它们以正确的数字顺序显示。然而,在 Brasero 中,当我对它们进行排序时,它的排序很奇怪(正确,但不是我想要的顺序)。它们的排序如下:
1
10
100
101
2
20
200
201
201a
3
3a
30
300
301
.
.
.
我想重命名它们以便它们以正确的字母数字顺序显示,所以我最终得到如下结果:
1
2
3
3 (2)
3 (2)a
4
5
.
.
.
50
50 (2)
.
.
.
317 (2)a
.
.
.
问题:
有人可以推荐一个命名约定来重命名所有这些文件,以便它们处于正确的顺序(例如,相机使用 IMG_xxxx.JPG,这很好)?
有人能给我一个针对这些文件的 Linux 命令行重命名命令,以便将它们重命名为显示并按正确的顺序刻录吗?
它们是标准 JPEG 文件,因此按 EXIF 数据中的日期对它们进行排序可能会有效。我只需要正确的命令或 GUI(我不介意)来对它们进行排序。
按日期重命名它们可能就足够了?
答案1
如需按日期重新排序,看这里(“仅通过时间戳重命名 JPG”)。通过谷歌搜索“rename jpeg exif linux”得到该信息。
答案2
如何对文件进行排序取决于查看文件列表的应用程序。显然,Nautilus 对数字文件使用“自然顺序”,而您的其他工具则使用标准计算机排序算法,按“字典顺序”排序(“a”比“aardvark”短,因此“a”排在前面,“b”排在“aardvark”之后,因为“b”大于“a”。“1”比“100”短,因此“1”排在前面。“2”排在“100”之后,因为“2”大于“1”)。
完全有可能,无论您将这张 CD 放入什么设备,它都会忽略您尝试强制文件以某种方式排序的所有操作。我有一个 mp3 播放器,无论如何,它都会按照歌曲添加到设备的顺序对所有歌曲进行排序。如果读取 CD 的程序按文件名排序(根据我的经验,大多数程序都按文件名进行字典排序),您可以通过在文件名中填充足够多的零来使文件名的数字部分全部相同,从而强制自然排序和字典排序以相同的方式对文件进行排序:
00001.jpg
00002.jpg
00100.jpg
00100 (01).jpg
00100 (01a).jpg
00100 (13).jpg
然后自然排序和字典排序都会得到相同的结果。自动化这个过程会很困难。如果你从文件名中删除所有的括号、空格和字母,下面的脚本会把所有内容填充到 5 位数字(为了增加或减少零,请更改5
中的数字printf %05d $n
:
#!/bin/bash
set -e
for x in *; do
e=${x##*.}
n=${x%.*}
nn=`printf %05d $n`
mv "$x" "$nn.$e"
done
但是如果文件名中除了数字之外还有其它内容,则会出现错误。除了一次重命名一个文件或执行诸如此类的操作外,我想不出其他方法,rename s/^/0000/ ?.jpg
rename s/^/000/ ??.jpg
rename s/^/00/ ???.jpg
但这仍然无法很好地处理文件名末尾的额外内容。
如果您想自动进行转换,您可能最终会将它们完全重命名为其他名称(例如其他海报建议的时间戳,只要时间戳按降序排列(年月日时分秒),它们就会按字典顺序正确排序,但如果有两个文件具有相同的时间戳,如果您(或您的 exif 处理程序)不小心,您可能会丢失一个。
答案3
在这种情况下,Adobe Bridge 非常有用,它有一些很好的工具可以重命名一组文件,并且有很多选项,您可以尝试在 Linux 上找到它。