【问题标题】:Error exit delayed from previous error从上一个错误延迟错误退出
【发布时间】:2014-08-05 05:08:02
【问题描述】:

我正在尝试在目录中查找文件,然后 gzip 然后 tar。

脚本:

find /home -type f -name "*.log" -newer /home/path/start_date \
    ! -newer /home/path/end_date | xargs -0 tar -cvzf files.tar.gz

tar 仍在创建中,但出现了一些错误:

tar:/home/path/filename.log\n Cannot stat : No such file or directory
tar:Error exit delayed from previous errors.

谁能解释这些错误是什么?谢谢。

【问题讨论】:

  • 如果你使用xargs -0,那么你需要使用find -print0...
  • 找到 /home -type f -name "*.log" -newer /home/path/start_date ! -较新的 /home/path/end_date -print0| xargs -0 tar -cvzf files.tar.gz ....你的意思是这样吗?

标签: linux shell gzip tar


【解决方案1】:

你忘了-print0

-print0

是的;在标准输出上打印完整的文件名,后跟 空字符(而不是 -print 使用的换行符)。 这允许文件名包含换行符或其他类型的白色 处理程序正确解释的空间 找到输出。该选项对应xargs的-0选项。

同时引用你的感叹号以防止历史扩展以防万一:

find /home -type f -name "*.log" -newer /home/path/start_date \! -newer /home/path/end_date -print0 | xargs -0 tar -cvzf files.tar.gz

这不是 POSIX,但如果您可以使用 -not,请改用 -not

... -not -newer ...

【讨论】:

  • 我试过这样做,我得到了这个:tar :Removingleading '/' from member names
  • 还有一件事,当我尝试解压缩 tar 时,它再次创建父目录和子目录,然后解压缩 .例如:它创建 home/path/template/log1.log(在我的模板目录中再次创建 home ..path..template 目录)。
  • @Kshitiz Tar 默认会剥离它,这很正常,但您可以使用 -P--absolute-names (don't strip leading '/'s from file names) 来阻止它。
  • @Kshitiz 您究竟想如何存储文件?您希望不包含目录吗?
  • konsole,我看到了帖子,但我不知道该把 -p 放在哪里。对不起,我还在学习 shell 脚本。
猜你喜欢
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多