
最新のファイルのサイズが 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 の両方を拡張することです。
.
非表示でない通常ファイル ( )のリスト。変更時刻o
順に並べられ、1 つ ( ) に制限されます。m
[1]
- 同じですが、
L
長さが より確実に大きい (+
)ファイルに限定されます2097152
(ただし、N
ullGlob が有効になっているため、一致しない場合でも致命的なエラーにはなりません)。
そして、条件は、両方の glob が同じファイルに展開される場合を意味します。
はファイルのサイズではなく、ディスク使用量(実装や環境ls -s
に応じて512バイト単位、KiBなど)を報告することに注意してください。はファイルサイズを報告します。ls
ls
長さ出力形式 (ls -l
またはls -n
(または一部の実装では-o
/ -g
))。
もう 1 つのオプションは、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を超えている)