Linux

壓縮 10 個最近的文件

  • March 14, 2019

基本上我的要求是找到 10 個最新的日誌並將其壓縮成 zip。我試過 command ls -Lt | head -10 | zip log.zip *.log,但輸出不匹配。

首先進行備份

你應該試試:

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

你的命令

zip log.zip *.log

正在嘗試壓縮目前目錄中以 結尾的每個文件.log,它沒有從 STDIN 獲取文件名。

如果你的目錄有混合文件,即日誌文件以外的文件,那麼你可以嘗試:

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

為了安全地選擇目前目錄中的 10 個最新(普通)文件,我建議zsh,因為它可以安全地、本機地根據修改時間選擇文件:

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

這使用了兩個 zsh 的萬用字元(“glob”)限定符和一個下標運算符:

  • *.log( ... )– 這會以 開頭的萬用字元*.log,它​​將選擇目前目錄中以 結尾的每個文件,.log並按以下條件過濾
  • .– 這會過濾結果列表以僅包含普通文件
  • om– 這會按修改時間對結果列表進行排序(“排序”),最近的在前
  • [1,10]– 這通過選擇元素 1 到 10(十個最近的文件)來縮小結果列表

一旦 zsh 生成了 10 個最新的普通文件,它會將這些文件交給zip命令。


腳註:

  1. 預設情況下,zsh 不會選擇隱藏(點)文件,例如.foo.log; 如果您有此類文件希望選擇它們,您可以包含Dglob 限定符 ( *.log(.Dom[1,10])) 或設置GLOB_DOTS選項 (with setopt globdots)。

引用自:https://unix.stackexchange.com/questions/506230