我只想将当前目录中的文件添加/更新到archive.7z中,而不会递归到更低的目录中。这是可行的,但由于每个文件的初始化,它的速度很慢:
find -maxdepth 1 -type f | while read f;do 7za a ~/archive.7z "$f" ; done这也是可行的,而且速度快得多,但不确定它对带有空格和其他有问题的字符的有问题的文件名的防弹能力:
find -maxdepth 1 -type f -print0 | xargs -r0 7za a ~/archive.7z --难道不应该有更优雅的方式吗?就像tar命令中的-T -一样。我目前在Ubuntu16上使用的是7za版本9.20。下面这样的变体失败了,它们开始递归到我不想要的更低的目录中:
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 -- *.*发布于 2020-10-07 08:51:05
find . -maxdepth 1 -type f -exec 7z a archive.7z {} +这样,您就可以调用一个7z进程(与语法-exec {} \;相反),并且速度会很快。事实上,在引发第二个进程之前,它将使用最大允许的参数。
另外,关于您关于文件名的查询。while循环是不可接受的。find -print0 | xargs -0很好而且速度很快。通常,您必须对find的输出进行零分隔,并在下一次处理时将其作为零分隔的输入读取,以保留文件名。
https://stackoverflow.com/questions/64232633
复制相似问题