ディレクトリ内で 4 番目に小さい (非表示でない) ファイルの名前を見つける必要があるとします。
これを行うための正しいコマンドは何ですか? 私がls -l
、head
、tail
、line
、およびawk '{print}'
ステートメントしか知らない男だとします。
From man ls
:-S
出力をサイズの降順で並べ替え、出力-r
の順序を逆にします。
だから私の解決策は次のようになります
ls -rS | sed -n '4p'
または、代わりに
ls -rS | awk 'NR==4'
ファイル名のスペースや改行などの奇妙な文字を処理するのは難しく、エラーが発生しやすいため、解析ls
は安全ではありません。
null で終わる行末を使用するため、より堅牢な次のアプローチを使用することをお勧めします。
count=0
while IFS= read -r -d '' line; do
((++count == 4)) && echo "${line#* }" && break
done < <(find . -type f -maxdepth 1 -printf '%s %p\0' | sort -zn)