最新のファイル名検索

最新のファイル名検索

ファイルを見つけるためにbashスクリプトを作成しています。ファイル名最新のファイルなので、ファイル名は次のようになります。

...
Wed_Dec_30_16:47:41_PHT_2015.zip
Wed_Dec_30_16:00:41_PHT_2015.zip
Wed_Dec_30_16:00:41_PHT_2015.zip
Thu_Dec_31_16:49:14_PHT_2015.zip
...

私はすべての.zipファイルを検索するコマンドを使用していますが、find次のような配列が必要になる可能性があると思いました。

readarray -t lines <<< "$(find . -type f -name '*.zip' -exec basename {} \;|tr -d '[.zip]'|tr '_' ' ')"
len=${#lines[@]}
for ((i=0;i<len;i++)); do
    echo ${lines[$i]}
done

また、端末からこのようなすべてのファイル名(日付/時刻を含む)を取得します。それはまさに次のとおりです。

Wed Dec 30 16:47:41 PHT 2015
Wed Dec 30 16:00:35 PHT 2015
Thu Dec 31 12:14:13 PHT 2015
Thu Dec 31 12:19:34 PHT 2015
Wed Dec 30 16:49:14 PHT 2015
Thu Dec 31 13:01:11 PHT 2015
Mon Dec 28 12:35:44 PHT 2015
...

stringところで、私が使っている製品と比べてどうかわかりませんdate

Wed Dec 30 16:49:14 PHT 2015これが文字列形式のファイルを回復する本当に完全な方法であるかどうかはわかりません。Wed_Dec_30_16:49:14_PHT_2015.zip

助けてくれてありがとう。

編集する:

スクリプトを修正し、「文字列」を秒単位の「日付」に変換しました。

declare -a my_array
len=${#lines[@]}
for ((i=0;i<$len;i++));do
    my_array[$i]=`date -d "${lines[$i]}" +%s`
done

最大のものを選択してください:

max=${my_array[0]}
for((i=0;i<$len;i++));do
    if [ ${my_array[$i]} -gt $max ];then max=${my_array[$i]};fi
done
echo $max

端末:

1451465261
1451462435
1451535253
1451535574
1451465354
1451538071
1451277344
1451538071 <== max one

それでは、次に戻る必要がありますかWed_Dec_30_16:00:41_PHT_2015.zip

誰でも簡単な方法はありますか?

ベストアンサー1

GNUと共にsort入力としてinput.txt説明する):

cat input.txt | sort -t _ -k6n,6.4 -k2M -k3n -k4.1n,4.2 -k4.4n,4.5 -k4.7n,4.8

--debugソートに使用されるビューフィールドにフラグを追加します。部分文字列を調整する必要がある場合に便利です。

Wed_Dec_30_16:00:41_PHT_2015.zip
                        ____
    ___
        __
           __
              __
                 __

おすすめ記事