首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我有一个文件列表-来自find命令,如何使用它压缩/tar文件并删除原始文件

我有一个文件列表-来自find命令,如何使用它压缩/tar文件并删除原始文件
EN

Unix & Linux用户
提问于 2017-08-10 06:36:01
回答 1查看 98关注 0票数 2

我有一个来自find命令的文件列表。如何压缩/压缩文件并删除原始文件?结果来自:find . -type f -exec egrep "mxprod|nlsoprdc" {} /dev/null \;;我如何压缩文件并删除原始文件?

EN

回答 1

Unix & Linux用户

发布于 2017-08-10 07:01:40

使用GNU工具,您可以:

代码语言:javascript
复制
find . -type f -exec grep --null -El 'mxprod|nlsoprdc' {} + |
  tar --xz -cf /path/to/file.tar.xz --remove-files --null -T -

虽然对于find的特殊用法,您可以取消它,使用GNU grep's -r

代码语言:javascript
复制
grep -r --null -El 'mxprod|nlsoprdc' . |
  tar --xz -cf /path/to/file.tar.xz --remove-files --null -T -

请注意,找到的文件所在的目录不是作为归档的成员添加的。它们将在提取存档时重新创建,但不使用原始元数据(所有权、权限、ACL、其他属性.)。原来的那些。

你可以通过这样做来解决这个问题:

代码语言:javascript
复制
grep -r --null -El 'mxprod|nlsoprdc' . |
  awk -F/ -v RS='\0' -v ORS='\0' '{
    p=""; sep=""
    for (i = 1; i < NF; i++) {
      p = p sep $i; sep=FS
      if (! (p in dirs)) {
        print p
        dirs[p]
      }
    }
    print}' |
  tar --xz -cf /path/to/file.tar.xz --no-recursion --remove-files --null -T -

尽管您将看到tar无法删除的目录的错误,因为它们不是空的。

在任何情况下,请注意,如果文件系统已满,xz可能无法在tar已经删除该文件之后为给定文件编写输出,这是很危险的。

最好是在确保正确创建存档之后才开始删除文件。

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

https://unix.stackexchange.com/questions/385148

复制
相关文章

相似问题

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