如何更改多个目录的名称?

如何更改多个目录的名称?

我有一些目录,想将其名称更改为{00..16}

$ ls
'FVSFT1092A'         'FVSFT1092I'
'FVSFT1092B'         'FVSFT1092J'
'FVSFT1092C'         'FVSFT1092K'
'FVSFT1092D'         'FVSFT1092L'
'FVSFT1092E'         'FVSFT1092M'
'FVSFT1092F'         'FVSFT1092N'
'FVSFT1092G'         'FVSFT1092O'
'FVSFT1092H'         'FVSFT1092P'

针对这种情况有什么命令吗?

答案1

可能有更好的方法,但我将这样做:

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(以及相关命令prenamerename)以-n进行试运行。但在这种情况下,它比平常更重要,因为在这种情况下,命令的行为可能会因不同的区域设置而有所不同,或者如果您有其他不想重命名的类似名称的文件。


该命令的工作方式是,shell 会扩展FVSFT1092?为当前目录中所有名称后跟FVSFT1092任意一个附加字符的文件列表。此列表将传递给命令file-rename,该命令将根据(上面显示的第一个命令中)Perl 表达式修改名称:

s/.*/sprintf "%02d", ++our $i/e

它将传递给它的任何文件名重命名为尚未使用的最小数字(以 开头)1,并将其格式化为两位数,即使它小于 10。因此,它取决于提供文件名的顺序,而这又取决于当前目录中实际存在哪些文件以及 shell 以何种顺序展开它们。

这应该可以工作。在奇怪的极端情况下,它不会按照您的意愿运行,并且可以通过-n首先运行命令(如上所示)轻松检查这一点,无论如何您都应该这样做以发现任何错误。

有关命令接受的语法如何file-rename工作的一般信息,我建议在 Ubuntu 中批量重命名文件;rename 命令的简要介绍(经过奥利)。

相关内容