私はいくつかの問題を抱えています - ディレクトリを持つファイルのリスト (.txt ファイル内) があります。つまり、/student/2012/my/Video/hello.php です。私がする必要があるのは、そのリストの最後に編集されたファイルを取得することですが、それを行う方法がわかりません..
ありがとう
この回答では、bash のクイックソート アルゴリズムを示しました。スニペットは次のとおりです。
quicksort_files_by_mod_date() {
if ((!$#)); then
qs_ret=()
return
fi
# the return array is qs_ret
local first=$1
shift
local newers=()
local olders=()
qs_ret=()
for i in "$@"; do
if [[ $i -nt $first ]]; then
newers+=( "$i" )
else
olders+=( "$i" )
fi
done
quicksort_files_by_mod_date "${newers[@]}"
newers=( "${qs_ret[@]}" )
quicksort_files_by_mod_date "${olders[@]}"
olders=( "${qs_ret[@]}" )
qs_ret=( "${newers[@]}" "$first" "${olders[@]}" )
}
次に、ファイルのコンテンツを配列に丸呑みし、この関数を使用してqs_ret
、並べ替えられたファイル名を含む配列を取得し、最初のファイル名を出力します。
mapfile -t array < files.txt
quicksort_files_by_mod_date "${array[@]}"
echo "${qs_ret[0]}"
:)
述べる。それはすべて 100% bash です! (そしていくつかのバシズムを使用します)。
述べる。これは、スペースを含むファイル名でも機能します。(もちろん、改行ではありません)。
述べる。ファイルが存在するかどうかのチェックはありfiles.txt
ません。
もちろん、最新のものだけが必要な場合は、クイックソートは必要ありません。これだけでできます:
recent=
while IFS= read -r file; do
[[ $file -nt $recent ]] && recent=$file
done < files.txt
echo "$recent"
ねえ、それはまだ 100% bash であり、スペースを含むファイル名で失敗しません。