压缩 10 个最新文件

压缩 10 个最新文件

基本上我的要求是找到10个最新的日志并将其压缩成zip。我尝试过 command ls -Lt | head -10 | zip log.zip *.log,但输出不匹配。

答案1

要安全地选择当前目录中的 10 个最新(普通)文件,我建议使用zsh,因为它可以安全地、本机地根据修改时间选择文件:

zsh -c 'zip log.zip *.log(.om[1,10])'

这使用了 zsh 的两个通配符(“glob”)限定符和一个下标运算符:

  • *.log( ... )-- 这以 开始通配符*.log,它​​将选择当前目录中以 结尾的每1 个.log文件,并按以下条件进行过滤
  • .-- 这会过滤结果列表以仅包含纯文件
  • om-- 按修改时间对结果列表进行排序(“排序”),最近的在前
  • [1,10]-- 通过选择元素 1 到 10(最近的 10 个文件)来缩小结果列表的范围

一旦 zsh 生成了 10 个最新的纯文件,它就会将这些文件交给命令zip


脚注:

  1. 默认情况下,zsh 不会选择隐藏(点)文件,例如.foo.log;如果你有这样的文件希望选择它们,您可以包含D全局限定符 ( *.log(.Dom[1,10])) 或设置GLOB_DOTS选项(使用setopt globdots)。

答案2

第一的进行备份

你应该试试:

ls -Lt | head -10 | xargs zip log.zip 

你的命令

zip log.zip *.log

正在尝试压缩当前目录中以 结尾的每个文件.log,它不会从 STDIN 获取文件名。

如果您的目录有混合文件,即日志文件以外的文件,那么您可以尝试:

ls -Lt *.log | head -10 | xargs zip log.zip

答案3

尝试使用以下命令

ls -ltrh| awk '$1 ~ /-rw/{print $0}'|sed -n '1,10p'| awk '{print "zip" " " $NF".zip" " " $NF}'| sh

相关内容