最新ファイルのテストサイズ

最新ファイルのテストサイズ

最新のファイルのサイズが 2 MB より大きいかどうかを確認します。

test $(ls -st | head -n2 | tail -n1 | awk '{print $1}') -gt 2097152 && echo "true"

これを行うより効率的またはエレガントな方法はありますか?

私はawkの出力をさらにパイプしようとしました

| test {} -gt 2097152

しかし、

bash: テスト: {}: 整数式が必要です

それから

| test {}>"2097152"

常に「true」を返すので、私は次のような構造を思いつきました

test $(...) -gt 2097152

答え1

最新のファイルを取得するより良い方法があるかもしれませんlsが、ほとんどの作業は awk だけで実行できます。

ls -st | awk 'NR == 2 && $1 > 2097152 {print "true"}'
  • NR == 2- 2行目
  • $1 > 2097152- 最初の列が2097152より大きい場合

答え2

zsh

set -- *(.om[1]) *(N.L+2097152om[1])
if [[ $1 = $2 ]]; then
  printf '%s\n' "The apparent size of the newest non-hidden regular file in the current" \
                "directory ($1) is strictly greater than 2MiB."
fi

隠しディレクトリを含めたい場合は、D両方のglob修飾子に追加します。通常以外のファイル(ディレクトリ、シンボリックリンク、デバイスなど)を考慮したい場合は、削除します。.

アイデアは、これらの glob の両方を拡張することです。

  1. .非表示でない通常ファイル ( )のリスト。変更時刻o順に並べられ、1 つ ( ) に制限されます。m[1]
  2. 同じですが、L長さが より確実に大きい ( +)ファイルに限定されます2097152(ただし、NullGlob が有効になっているため、一致しない場合でも致命的なエラーにはなりません)。

そして、条件は、両方の glob が同じファイルに展開される場合を意味します。

はファイルのサイズではなく、ディスク使用量(実装や環境ls -sに応じて512バイト単位、KiBなど)を報告することに注意してください。はファイルサイズを報告します。lsls長さ出力形式 (ls -lまたはls -n(または一部の実装では-o/ -g))。

もう 1 つのオプションは、zshstat組み込みを使用して、最新のファイルのサイズ (またはディスク使用量) を取得することです。

zmodload zsh/stat
if
  stat -LH s -- *(.om[1]) &&
    ((s[size] > 2097152))
then
  printf '%s\n' "The apparent size of the newest non-hidden regular file in the current" \
                "directory ($1) is strictly greater than 2MiB."
fi

または:

zmodload zsh/stat
if
  stat -LH s -- *(.om[1]) &&
    ((s[blocks] > 2097152))
then
  printf '%s\n' "The newest non-hidden regular file in the current directory" \
                "($1) uses more than 2097152 512-byte units of disk space."
fi

(つまり、ディスク使用量が1GiBを超えている)

関連情報