Linux
壓縮 10 個最近的文件
基本上我的要求是找到 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
命令。腳註:
- 預設情況下,zsh 不會選擇隱藏(點)文件,例如
.foo.log
; 如果您有此類文件並希望選擇它們,您可以包含D
glob 限定符 (*.log(.Dom[1,10])
) 或設置GLOB_DOTS
選項 (withsetopt globdots
)。