提问人:Simon 提问时间:10/27/2023 更新时间:10/27/2023 访问量:54
压缩与模式匹配的所有子文件夹中的所有文件
Compress all files in all subfolders matching a pattern
问:
在我的根文件夹中,有许多名为 、 、 、 ...
它们中的每一个都有不同的子文件夹层次结构。
在我的情况下,我需要压缩与模式匹配的所有子文件夹中的文件(所有名称中带有“test”的 numpy 文件)。data_x
data_easy
data_real
*test*.npy
目前,我有
shopt -s globstar; tar -czvf data.tar.gz data*/**/*test*.npy
但它非常慢。有时,只压缩所有文件而不将模式与 匹配会更快。有没有更有效的方法可以做到这一点?**/*test*.npy
答:
2赞
Philippe
10/27/2023
#1
试试这个,看看是否有性能改进:
find data* -type f -name "*test*.npy" -print0 | tar -czvf data.tar.gz --null -T -
评论
0赞
Simon
10/27/2023
快多了,谢谢!你能解释一下为什么这么慢吗?**
1赞
Barmar
10/27/2023
@Simon shell 对文件名进行排序。如果有很多,这可能会很慢。
1赞
Charles Duffy
10/27/2023
不仅如此,在管道中,当开始操作时,它仍然可以运行,但对于 glob,这两个步骤是串行的。find
tar
0赞
Simon
10/27/2023
明白了,非常感谢您的解释!
评论
echo data*/**/*test*.npy > /dev/null
**
**
,与 不同,对输出进行排序;而且,由于您要将 glob 放在 argv 上,因此在启动 tar 之前必须完全知道 argv。该操作可以在找到结果后立即开始写入结果;glob 必须先完成对所有文件名的查找,然后才能对它们进行排序,然后才能调用 .find
find
tar