我有大量的文件(数十万)都具有相同的名称格式。 文件名格式为: [前缀] [数]后缀] 其中所有文件的[prefix]和[suffix]相同,只是数字部分发生变化。数字部分类似于0004732 所以文件名是: [前缀] 004732 [后缀] [前缀] 004733 [后缀] [前缀] 004734 [后缀] 等
我需要将大约100,000个文件(带有连续数字)的范围移动到另一个目录,我想知道是否可以使用正则表达式执行此操作。
答案 0 :(得分:0)
您正在寻找character classes。使用正则表达式指定数字范围有点困难,因为它适用于文本,而不是数字,但可以这样做(对于文件1-100):
prefix[0-1][0-9][0-9]suffix
prefix[0-1]\d\dsuffix #this also works in PERL regex
更复杂的数字变得棘手。对于0-211:
prefix([0-1][0-9][0-9]|20[0-9]|21[0-1])suffix
答案 1 :(得分:0)
如果您使用的是Windows,请安装Cygwin,然后执行以下操作。如果您使用的是Mac OS X或Linux,只需打开终端即可。您需要执行以下操作:
ls PREFIX* | sed 's/PREFIX\(0[0-9]\)SUFFIX/mv & tmp\/PREFIX\1SUFFIX/' | sh
这是做什么的?
您可以通过查看以下内容调整正则表达式以匹配您的号码范围: http://www.regular-expressions.info/numericranges.html
答案 2 :(得分:0)
据我所知,没有正则表达式(处理复杂的情况),但你可以轻松使用循环:
以下代码在linux中运行。我使用CygWin在Windows上运行simnilar代码,它也可以运行。也许在Windows中有类似的方法。
如果两个数字的数字相同,则为
示例:来自
[前缀] 000012345 [后缀]
到
[前缀] 000056789 [后缀]
for (( i=12345; i<56789; i++)); do mv "[prefix]0000$i[suffix]" /newDirectoryPath done
否则你可以使用多个(通常是两个或三个)命令;
示例:来自
[前缀] 000012345 [后缀]
到
[前缀] 003456789 [后缀]
for (( i=12345; i<99999; i++)); do mv "[prefix]0000$i[suffix]" /newDirectoryPath done
for (( i=100000; i<999999; i++)); do mv "[prefix]000$i[suffix]" /newDirectoryPath done
for (( i=1000000; i<3456789; i++)); do mv "[prefix]00$i[suffix]" /newDirectoryPath done