简体   繁体   English

复制与范围内的数字模式匹配的文件

[英]Copy files matching a number pattern within a range

I have a directory in Ubuntu containing about 1M files with names starting with numbers like: 我在Ubuntu中有一个目录,其中包含大约1M个文件,其名称以数字开头,例如:

1-filename-438573_45785.json.gz
2-filename-419805_47894.json.gz
4-filename-230071_00394.json.gz
5-filename-230071_00394.json.gz
...
1000000-filename-345675_909090.json.gz

Note that some files(numbers) are missing. 请注意,缺少某些文件(数字)。

I want to copy the files starting with names from 1 to 10000 so I've tried: 我想复制名称从1到10000开头的文件,所以我尝试了:

find . -regextype posix-egrep -regex '.*/[0-9]{4}-.+' |xargs cp -t {destination}

However, when I get the list of files found, I am getting the ones with file numbers from 1000 onwards. 但是,当我找到找到的文件列表时,就会得到文件号从1000开始的文件。

How can I fix the regex to get the whole range needed? 如何修复正则表达式以获得所需的整个范围?

Thanks. 谢谢。

With GNU find: 使用GNU查找:

find . -regextype posix-egrep -regex '.*/([0-9]{1,6}|1000000)-.+'

output: 输出:

./5-filename-230071_00394.json.gz
./2-filename-419805_47894.json.gz
./1000000-filename-345675_909090.json.gz
./4-filename-230071_00394.json.gz
./1-filename-438573_45785.json.gz

From what you describe, it seems that the only problem may be related to the regex. 根据您的描述,似乎唯一的问题可能与正则表达式有关。 I would try this regex instead: '.*/([0-9]{1,4}|10000)-.+' . 我会尝试使用此正则表达式: '.*/([0-9]{1,4}|10000)-.+'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM