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

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

最新のファイルのサイズが2MBより大きいことを確認したいと思います。

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

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

私はawkの出力をさらにパイピングしようとしました。

| test {} -gt 2097152

しかし得る

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

それから

| test {}>"2097152"

利回りは常に「真」なので、この仕組みを思い出しました。

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

隠しディレクトリを含めるには、両方のDglob修飾子に追加します。非正規ファイル(ディレクトリ、シンボリックリンク、デバイス...)を考慮するには、削除してください。.

アイデアは、次の2つの範囲を拡張することです。

  1. .o変更時間ごとにソートされた非表示の通常の()ファイルのリストm、1つだけ([1])。
  2. L同じですが、長さが()より厳密に大きい+ファイルにのみ適用されます2097152(ただし、NullGlobが有効になっているため、一致するものがなくても致命的なエラーではありません)。

私たちの条件は、両方のglobが同じファイルに拡張されることです。

ls -sファイルサイズは報告されず、ディスク使用量(実装およびls/または環境によっては512バイト単位の数、KiB、またはその他の形式で表示されます)に注意してください。ls以下のレポートファイルサイズ長い出力形式(ls -lまたはls -n(または一部の実装では-o/ -g))。

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

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を超えています。)

関連情報