例如:我有 100 个文件,每个文件的名称如下:g1001_1_405901_828719213.arc g1001_1_405902_828719213.arc g1001_1_405902_828719213.arc
最多 405999
我想将每个文件的名称更改为 g1001_1_405901_405901.tar.gz,制作一个 tar.gz 文件
你能用你的新名字一次性完成所有事情吗?
答案1
我不确定我是否理解了这个问题...
您是否尝试将具有相似名称的文件合并为一个 tar.gz 文件?
例如,在您的问题中,您提到“g1001_1_405901_828719213.arc g1001_1_405902_828719213.arc g1001_1_405902_828719213.arc”,并且它们上升到“405999”。
如果这意味着您有很多以 g1001_1_405901 开头的文件,并且名称的最后一部分(“_828719213.arc”)有所不同,那么您应该能够使用通配符来匹配名称,直到它们偏离的点。
因此,例如要打包所有以 g1001_1_405901 开头的文件,您可以使用以下命令:
tar -czvf g1001_1_405901.tar.gz ./g1001_1_405901_*.arc
如果这不是您的问题,而您只是想压缩目录中与模式匹配的文件,那么您可以使用以下命令:
gzip g1001_1_405901.*.arc
您的问题不太清楚。如果这些都不是您想要的,也许您可以编辑您的问题并提供更多详细信息。
答案2
IIUC,您可以使用 Perl 实现该rename
程序(还有另一个程序称为,rename
它是包的一部分util-linux
)。示例 - 首先让我们重新创建您在问题中提供的文件列表:
$ touch g1001_1_405901_828719213.arc g1001_1_405902_828719213.arc
$ ls -Al
total 0
-rw-r--r-- 1 ja users 0 Sep 11 21:30 g1001_1_405901_828719213.arc
-rw-r--r-- 1 ja users 0 Sep 11 21:30 g1001_1_405902_828719213.arc
再次运行perl-rename
并列出文件:
$ perl-rename 's,_[0-9]+.arc,.tar.gz,;s,_([0-9]+)\.tar.gz,_\1_\1.tar.gz,' *
$ ls -Al
total 0
-rw-r--r-- 1 ja users 0 Sep 11 21:30 g1001_1_405901_405901.tar.gz
-rw-r--r-- 1 ja users 0 Sep 11 21:30 g1001_1_405902_405902.tar.gz