私はN最新のファイルを検索する方法を知っているいくつかの文字列で始まるファイル名を指定して、最新のN個のファイルを検索し、私はいくつかの文字列で始まるファイル名のN個のファイルを検索する方法を知っているバッシュ:
ls -latr | tail -n32
そして、
ls filestring* | tail -n32
しかし、ファイル名がいくつかの文字列で始まる最新の50個のファイルを探したいと思います。
私はN最新のファイルを検索する方法を知っているいくつかの文字列で始まるファイル名を指定して、最新のN個のファイルを検索し、私はいくつかの文字列で始まるファイル名のN個のファイルを検索する方法を知っているバッシュ:
ls -latr | tail -n32
そして、
ls filestring* | tail -n32
しかし、ファイル名がいくつかの文字列で始まる最新の50個のファイルを探したいと思います。
ls -lt fileprefix* | head -32
ソートとテールを逆にする必要はありません。
これは、接頭辞で始まるファイルが1つのコマンドラインに収まるファイルよりも多い場合には機能しません。 –
これは私の目的のために働く – tptptpfg
以下はGNU find
とsort
が必要ですが、(改行と名を含む)すべての可能なファイル名で動作し、ディレクトリに指定された接頭辞で始まるファイルの数はARG_MAX
に収まらない場合:
#!/usr/bin/env bash
files=()
counter=32
while IFS= read -r -d ' ' timestamp &&
IFS= read -r -d '' filename &&
((--counter >= 0)); do
files+=("$filename")
done < <(find "$dir" -type f -printf '%[email protected] %p\0' | sort -zgr)
declare -p files ## print the generated array of filenames
-printf '%[email protected] %p\0'
を使用すると、各結果がUNIXのタイムスタンプ(seconds-since-epoch)で出力されます。スペース;ファイル名。そしてNUL。sort -z
は、入力レコードと出力レコードを区切るNUL(改行とは異なり、ファイル名には存在しない)を使用するように指示します。IFS= read -r -d ' ' timestamp && IFS= read -r -d '' filename
は、与えられたレコードのスペースまでの内容を変数timestamp
に読み込み、次のNULまですべてを変数filename
に読み込みます。Why you shouldn't parse the output of ls(1)のメタデータに基づいてファイルをソートまたは比較する方法については、BashFAQ #3を参照してください。
人間の批評またはスクリプトによる使用の場合は、 'ls -t'はあなた自身のために正しいものです。それはスクリプトにとって正しいことではありません。 –
'zsh'のためのプラグインです。このタイプのタスクに適しています:' print -l filestring *(om [1,50]) '。 – chepner