1

私はいくつかの問題を抱えています - ディレクトリを持つファイルのリスト (.txt ファイル内) があります。つまり、/student/2012/my/Video/hello.php です。私がする必要があるのは、そのリストの最後に編集されたファイルを取得することですが、それを行う方法がわかりません..

ありがとう

4

2 に答える 2

0

この回答では、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 であり、スペースを含むファイル名で失敗しません。

于 2013-10-31T10:22:27.673 に答える