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

标签 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 开始的文件。

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

谢谢。

最佳答案

使用 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

关于regex - 复制与范围内的数字模式匹配的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52152895/

相关文章:

bash - bash中 "< "有什么用

bash - 没有通过SSH从bash -c输出

python - 替换所有出现的连续重复值对

regex - 用其他文件中的行替换行号

linux - 等待机器启动时超时!! Vagrant-虚拟盒子

linux - 模拟 PTY 并输出行刷新流

php - 如何在 Linux 上使用 PHP 从本地主机发送电子邮件

javascript - 如何正则表达式匹配整个字符串而不是单个字符

regex - 如何忽略正则表达式主题字符串中的空格,但前提是它出现在换行符之后?

database - 如何使用 shell 脚本将 HiveQL 查询的结果输出到 CSV?