我有一些目录,我想将其名称更改为{00..16}
.
$ ls
'FVSFT1092A' 'FVSFT1092I'
'FVSFT1092B' 'FVSFT1092J'
'FVSFT1092C' 'FVSFT1092K'
'FVSFT1092D' 'FVSFT1092L'
'FVSFT1092E' 'FVSFT1092M'
'FVSFT1092F' 'FVSFT1092N'
'FVSFT1092G' 'FVSFT1092O'
'FVSFT1092H' 'FVSFT1092P'
这种情况有什么命令吗?
可能有更好的方法,但我会这样做:
file-rename -n 's/.*/sprintf "%02d", ++our $i/e' FVSFT1092?
如果您的 shell 告诉您该file-rename
命令不存在,请安装该rename
软件包。
如果您只想替换最后一个字符,而不是原始名称中的所有字符,则可以使用以下命令:
file-rename -n 's/.$/sprintf "%02d", ++our $i/e' FVSFT1092?
正如所写,这些命令不会重命名任何文件。当需要重命名它们时,删除-n
. 在删除之前-n
,您应该检查输出。它应该显示每个文件重命名的内容。您还应该确保仅列出您实际要重命名的文件,而不列出其他文件。对于上面显示的第一个命令,它应该显示:
rename(FVSFT1092A, 01)
rename(FVSFT1092B, 02)
rename(FVSFT1092C, 03)
rename(FVSFT1092D, 04)
rename(FVSFT1092E, 05)
rename(FVSFT1092F, 06)
rename(FVSFT1092G, 07)
rename(FVSFT1092H, 08)
rename(FVSFT1092I, 09)
rename(FVSFT1092J, 10)
rename(FVSFT1092K, 11)
rename(FVSFT1092L, 12)
rename(FVSFT1092M, 13)
rename(FVSFT1092N, 14)
rename(FVSFT1092O, 15)
rename(FVSFT1092P, 16)
运行它而不-n
实际重命名文件。您几乎应该总是先运行file-rename
(以及相关的命令prename
和rename
)以-n
进行试运行。但在这种情况下,它甚至比平常更重要,因为在这种情况下,对于不同的区域设置,或者如果您有其他类似命名的文件不想重命名,命令的行为可能会有所不同。
该命令的工作方式是 shell 扩展FVSFT1092?
为当前目录中所有文件的列表,这些文件的名称FVSFT1092
后跟任意一个附加字符。这个列表被传递给file-rename
命令,它根据 Perl 表达式(在上面显示的第一个命令中)修改名称:
s/.*/sprintf "%02d", ++our $i/e
这会将传递给它的任何文件名重命名为尚未使用的最低数字,以 开头1
,并将其格式化为两位数字,即使它小于 10。因此,它取决于提供文件名的顺序,而这又取决于什么文件实际上存在于当前目录中,以及 shell 将它们展开的顺序。
这应该有效。在奇怪的极端情况下,它不会执行您想要的操作,并且可以通过使用-n
first运行命令(如上所示)来轻松检查这一点,无论如何您都应该这样做以捕获任何错误。
有关file-rename
命令接受的语法如何工作的一般信息,我建议在 Ubuntu 中批量重命名文件;对重命名命令的最简短介绍(由Oli 提供)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句