基本上我的要求是找到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
。
脚注:
- 默认情况下,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