
最新のファイルのサイズが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
隠しディレクトリを含めるには、両方のD
glob修飾子に追加します。非正規ファイル(ディレクトリ、シンボリックリンク、デバイス...)を考慮するには、削除してください。.
アイデアは、次の2つの範囲を拡張することです。
.
o
変更時間ごとにソートされた非表示の通常の()ファイルのリストm
、1つだけ([1]
)。L
同じですが、長さが()より厳密に大きい+
ファイルにのみ適用されます2097152
(ただし、N
ullGlobが有効になっているため、一致するものがなくても致命的なエラーではありません)。
私たちの条件は、両方の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を超えています。)