我有一系列文件,名为:
2014111test.log
2014111test.log.stuff
2014111test.log.flibble
2014115test.log
2014115test.log.stuff
2014115test.log.flibble
我想找到所有超过一定年限的日志文件,然后将它们与名称开头相同的任何其他文件一起 tar.gz 到存档中。
$ find . -name '20*.log' -ctime +90 -exec 'tar zvcf /var/log/logzip/{}.tgz {}*' \;
find: tar zvcf /var/log/fwlogzip/./2014111test.log.tgz ./2014111test.log*: No such file or directory
...
但是,如果我输入
tar zvcf /var/log/fwlogzip/./2014111test.log.tgz ./2014111test.log*
就其本身而言,它工作正常。因此,看起来当 find 将命令传递给 shell 时,通配符出现了问题。
我错过了什么?
答案1
尝试删除 tar 命令周围的引号,并删除 { } 后的 *,为什么在 { } 后使用 *。我已检查过,它工作正常。
答案2
为什么你的 tar 命令周围有引号?删除引号。你正在尝试运行以下命令:
tar zvcf /var/log/fwlogzip/./2014111test.log.tgz ./2014111test.log*
无参数
请记住,UNIX 命令中可以嵌入空格。
我无法测试这个但是:
find . -name '20*.log' -ctime +90 -exec tar zvcf /var/log/logzip/{}.tgz {}* \;
应该管用。