bashでアスタリスク(*)として使用されるファイルのソート方法を変更するには?

bashでアスタリスク(*)として使用されるファイルのソート方法を変更するには?

変更日が最も古いファイルから始まり、変更日が最新のファイルで終わるディレクトリ内のすべてのファイルに対してコマンドを実行しようとしています。

*次のように、ディレクトリ内のすべてのファイルに対してコマンドを実行するためにアスタリスク()が役に立つと思います。

$ stat -x *

しかし、ファイルをアルファベット順に並べ替えるには、同じ機能を達成しながら修正日が最も古いファイルから始める方法はありますか?

編集:人間の意味で「最も早い」、最も古い文書を意味します。

ベストアンサー1

GNUツールを使用していると仮定すると、次のことを行う必要があります。

find . -maxdepth 1 -name '*ASD*' -printf '%T@\t%p\0' | 
  sort -z -k1.1n |
  while IFS=$'\t' read -rd '' mtime name; do
    # do something with the filename
    echo ">>>$name"
  done

改行を含む名前など、可能なファイル名を処理するために追加のフープが使用されます。

これを関数としてカプセル化するには、次のようにします。

files_by_mtime () { 
    local pattern=$1
    local -n arr=$2
    arr=()
    while IFS=$'\t' read -rd '' mtime name; do
        arr+=("$name")
    done < <(
        find . -maxdepth 1 -name "$pattern" -printf '%T@\t%p\0' | sort -z -k1.1n
    )
}

files_by_mtime '*' myarr
for file in "${myarr[@]}"; do
    # do something with the filename
    echo ">>>$file"
done

必須 bash バージョン 4.3+

おすすめ記事