特定の拡張子を持つファイルを変更時間で並べ替えて配列に保存します。

特定の拡張子を持つファイルを変更時間で並べ替えて配列に保存します。

ディレクトリファイルを並べ替えたり、配列に保存する方法に多くの回答がありました。

ソートの例

ls -t 

配列のディレクトリリスト

array=(*)

私の特定の問題は、ファイルを特定の方法でソートする必要があります。拡大する(たとえば*.sh、変更日時に基づいてソートされたすべてのファイルを配列に保存して、後でファイルを編集または削除するときに使用できます。

たとえば、配列内のファイルをソートした後に次のコマンドを実行すると、最新のファイルを削除できます。

rm ${array[0]} 

ベストアンサー1

存在する扱いにくいこれはとても簡単です。

array=(*.sh(Nom))

これグローバル予選 om修正時間に基づいて一致をソートし(最新の項目から)、N一致がない場合はエラーを発生させることなく配列を強制的に空にします。

bashのような他のシェルには時間でソートする良い方法はありません。は使用できますが、ls -t出力が明確ではなく中断される可能性があります。ファイル名にls空白または印刷可能でないと見なされる文字のみが含まれていることがわかっている場合は、\[*?コマンド置換を使用できます。

array=($(ls -t -- *.sh 2>/dev/null))

ワイルドカードと水平スペースを保護してより強力にすることができますが、改行文字と印刷できない文字はまだ問題です。

IFS=$'\n'; set -f
array=($(ls -t -- *.sh 2>/dev/null))
unset IFS; set +f

zsh以外の変数の値を引用するときは、二重引用符を使用することを忘れずに、名前がダッシュ--で始まるファイルを保護してください。それ以外の場合はオプションとして解釈されます。rm -- "${array[0]}"

おすすめ記事