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

时间:2018-09-03 15:47:02

标签: regex linux bash shell

我在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

请注意,某些文件(数字)丢失。

我想复制名称从1到10000开头的文件,所以我尝试了:

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

但是,当我找到找到的文件列表时,就会得到文件号从1000开始的文件。

如何修复正则表达式以获取所需的整个范围?

谢谢。

2 个答案:

答案 0 :(得分:1)

使用GNU查找:

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

输出:

./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

答案 1 :(得分:0)

根据您的描述,似乎唯一的问题可能与正则表达式有关。我会改用此正则表达式:'.*/([0-9]{1,4}|10000)-.+'