$date.txt形式のファイル名を持つディレクトリがあります。その中で最新の5つのファイルを見つけたいと思います。これよりもエレガントなソリューションはありますか?
for f in 2*.txt; do echo $f; done | tail -5 | while read f; do cat $f; done
ベストアンサー1
ksh93
、またはbash
:zsh
files=( 2*.txt )
cat "${files[@]: -5}"
これにより、パターンに一致するファイル名の配列が作成されます2*.txt
。次に、最後の5つの内容を印刷します。
では、zsh
ファイルの範囲を次の一部として指定することもできます。グローバル予選:
cat 2*.txt([-5,-1])
すべてのPOSIXシェルでは、この操作は次の方法で行うこともできます。
set -- 2*.txt
while [ "$#" -gt 5 ]; do shift; done # or: [ "$#" -gt 5 ] && shift "$(( $# - 5 ))"
cat "$@"
これは、位置引数をパターンに一致するファイル名に設定します。次に、リストに要素が5つだけ残るまで、リストの先頭から名前を移動します。 cat
次に、残りのファイル名について呼び出します。
これらすべてのソリューションでは、ファイルはアルファベット順にソートされます。スペースまたは改行を含むファイル名は正しく処理されます。