首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只将当前目录中的文件添加到.7z文件中,而不递归目录

只将当前目录中的文件添加到.7z文件中,而不递归目录
EN

Stack Overflow用户
提问于 2020-10-07 03:32:52
回答 1查看 207关注 0票数 1

我只想将当前目录中的文件添加/更新到archive.7z中,而不会递归到更低的目录中。这是可行的,但由于每个文件的初始化,它的速度很慢:

代码语言:javascript
复制
find -maxdepth 1 -type f | while read f;do 7za a ~/archive.7z "$f" ; done

这也是可行的,而且速度快得多,但不确定它对带有空格和其他有问题的字符的有问题的文件名的防弹能力:

代码语言:javascript
复制
find -maxdepth 1 -type f -print0 | xargs -r0 7za a ~/archive.7z --

难道不应该有更优雅的方式吗?就像tar命令中的-T -一样。我目前在Ubuntu16上使用的是7za版本9.20。下面这样的变体失败了,它们开始递归到我不想要的更低的目录中:

代码语言:javascript
复制
7za a -r- ~/archive.7z .
7za a -r- ~/archive.7z ./
7za a -r- ~/archive.7z *
7za a -r- ~/archive.7z -- *.*
7za a -r- ~/archive.7z -- "*"
7za a -r0 ~/archive.7z -- *.*
EN

回答 1

Stack Overflow用户

发布于 2020-10-07 08:51:05

代码语言:javascript
复制
find . -maxdepth 1 -type f -exec 7z a archive.7z {} +

这样,您就可以调用一个7z进程(与语法-exec {} \;相反),并且速度会很快。事实上,在引发第二个进程之前,它将使用最大允许的参数。

另外,关于您关于文件名的查询。while循环是不可接受的。find -print0 | xargs -0很好而且速度很快。通常,您必须对find的输出进行零分隔,并在下一次处理时将其作为零分隔的输入读取,以保留文件名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64232633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档