【问题标题】:Linux tar with pattern match and removing leading paths具有模式匹配和删除前导路径的 Linux tar
【发布时间】:2018-03-02 10:03:55
【问题描述】:

我正在尝试归档位于 /var/log 目录中的所有 .log 文件,并在创建时删除文件上的所有前导路径。

我发现我可以通过以下方式轻松归档所有 .log 文件:

tar -cvf ~/backup.tar /var/log/*.log

不幸的是,在线搜索后删除前导路径的方法是使用-C 更改命令的目录,现在它无法识别*.log,并认为* 是文字。

使用:

tar -cvf ~/backup.tar -C /var/log *.log

我收到一条错误消息,提示找不到文件 *.log

我想我的语法一定是关闭的,我已经尝试对语法进行一些更改但无济于事。

【问题讨论】:

  • *(和类似的通配符)在调用命令之前由 shell 扩展。 Tar 总是认为 * 是字面意思。
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地点。
  • 好的,这完全有道理,但必须有一种方法来做我想要实现的目标?就我目前的知识而言,我可以做一个或另一个,但不能同时做。
  • 为什么不在运行 tar 之前更改目录? ( cd /var/log && tar -cfv ~/backup.tar *.log )
  • 我猜这是我唯一的解决方案,我只是希望我可以从主目录实现所有命令。感谢您的帮助!

标签: linux tar


【解决方案1】:

使用 find 将文件传递给 tar

find /var/log -name *.log -printf '%P\n' |\
  tar -C /var/log -czf backup.tar.gz -T -
  • Find 将查找 *.log 文件并 printf 格式化输出以仅显示文件名。
  • tar 的 '-T -' 告诉从标准输入读取文件名

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 2021-03-13
    • 2018-09-11
    • 2019-03-08
    • 1970-01-01
    相关资源
    最近更新 更多