最新のファイルを10個圧縮

最新のファイルを10個圧縮

基本的に私の要件は、10個の最新のログを見つけてzipに圧縮することです。コマンドを試しましたが、ls -Lt | head -10 | zip log.zip *.log出力が一致しません。

答え1

現在のディレクトリから10個の最新(一般)ファイルを安全に選択するには、を使用することをお勧めします。zshこれは、修正時間に基づいてファイルを安全かつデフォルトで選択するためです。

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

これは、zshの2つのワイルドカード(「glob」)修飾子と下付き文字演算子を使用します。

  • *.log( ... )- ワイルドカードで始まります。現在*.logディレクトリで次に終わるファイルをすべて選択し、次にフィルタリングします。.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

現在のディレクトリで終わるすべてのファイルを圧縮しようとすると、.logSTDINはファイル名を取得しません。

ディレクトリに混合ファイル、つまりログファイル以外のファイルがある場合は、次のことを試すことができます。

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

関連情報