変更日が最も古いファイルから始まり、変更日が最新のファイルで終わるディレクトリ内のすべてのファイルに対してコマンドを実行しようとしています。
*
次のように、ディレクトリ内のすべてのファイルに対してコマンドを実行するためにアスタリスク()が役に立つと思います。
$ 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+
答え2
ls -tr
現在のディレクトリのファイルは、最も古い変更時間に基づいてソートされます。