-4

我怎样才能压缩这个文件?我收到一个错误:

find /users/tnea01/logfile10.log -type f -exec sh -c \ 'gunzip /users/tnea01/logfile_archive/$(basename $0)_$(date -r {} +%F).gz $0' {} \;

这是我得到的错误:

gzip: /users/tnea01/logfile10.tar.gz: 没有这样的文件或目录 gzip: /users/tnea01/logfile10.log: 未知后缀 -- 忽略

4

1 回答 1

1

如果您知道确切的文件名,您可能会执行以下操作:

find /users/tnea01 -maxdepth 1 -name '*.log' -type f -exec sh -c \
    'for f; do
       gzip -c <"$f" >"/users/tnea01/logfile_archive/${f##*/}_$(date -r "$f" +%F).gz"
     done' _ {} +

解释移动部分:

  • 唯一安全的使用方法sh -c是使用完全恒定的字符串;将变量代入其中(包括文件名)会产生安全漏洞。因此,我们不在代码中使用任何类型的替换工具,而是将文件名作为额外参数传递。
  • for f; do等同于for f in "$@"; do-- 它遍历所有命令行参数。
  • ${f**#/}计算最后一个/in之后的所有内容$f;请参阅参数扩展的 bash-hackers 页面
  • 为了安全起见,包括 在内的扩展$(date ...)需要在双引号上下文中;在这里,我们将整个目标文件名放在这样的引号中。

但是,既然你这样做了,那就完全没必要了。

f=/users/tnea01/logfile10.log
d=/users/tnea01/logfile_archive
gzip -c <"$f" >"$d/${f##*/}_$(date -r "$f" +%F).gz"
于 2016-07-28T22:18:16.857 回答