tar 抱怨“没有那个文件或目录”

tar 抱怨“没有那个文件或目录”

我在 Windows 上使用 bash(与 msysgit 一起分发)来压缩日志文件 - 每个日期一个存档。问题是,以下脚本不起作用,我不知道为什么。剪切用于获取与日志写入日期相对应的文件名的一部分。

find . -type f -name '*.log' | cut -c3-12 | head -n 5 | xargs -I common printf "%s%s\n" common "*.log" | xargs -I fg tar cvzf hello.tgz fg

在最后一步之前,每一行看起来都像这样 - 2014-07-04*.log
在最后一步,它给我这样的输出:

tar: 2014-07-01*.log: Cannot stat: No such file or directory

我怀疑这是因为末尾有一个换行符,因为当我手动调用 tar 命令时,它工作正常。有什么想法我错过了什么吗?我读了一些类似的答案,但它们似乎不适用于我的情况。例如,存档名称,稍后我会使其更具描述性。

答案1

问题是这个部分:

xargs -I common printf "%s%s\n" common "*.log"

插入*.log到模板中照原样。我完全不明白你为什么把“*”放在那里。这可以解决这个问题:

xargs -I common printf "%s%s\n" common .log

但是,最后一个tar命令实际上并不起作用,因为该tar cvzf hello.tgz fg命令将针对每个文件执行,因此您最终会得到一个包含单个文件(最后一个)的 tar。

我相信这应该更接近你想要的:

find . -type f -name '*.log' | cut -c3-12 | uniq | xargs -I{} sh -c 'tar zcvf {}.tgz {}*.log'

如果你有如下文件:

2014-07-01.1.log
2014-07-01.2.log
2014-07-02.1.log
2014-07-02.5.log
2014-07-02.6.log

然后命令会将前 2 个放入2014-07-01.tgz,将后 3 个放入2014-07-02.tgz

相关内容