최신 파일 이름 검색

최신 파일 이름 검색

파일을 찾기 위해 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
                        ____
    ___
        __
           __
              __
                 __

답변2

귀하의 데이터가 배열에 있다는 것을 알고 있지만 파일로 테스트했습니다. 그것은 중요하지 않습니다. 논리는 동일합니다.
에포크 이후의 초 단위로 변환하고, 어느 에포크 번호가 가장 큰지 테스트하고, 그 숫자를 기억하세요. 이것이 가장 최근 날짜입니다. 그런 다음 찾고 있는 특정 파일을 얻으려면 해당 문자열을 파일 구조와 조정해야 합니다.

파일: 날짜.txt

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

파일: find_latest.sh

#!/usr/bin/env bash

newest=0

while read line
do
    i=$(awk '{print $1" "$2" "$3" "$4" "$6}' <<<$line)
    epoch=$(date --date="$i" +'%s')
    if [ "$epoch" -gt "$newest" ]
    then
        newest=$(date --date="$i" +"%s")
    fi

done < dates.txt

echo "newest is: "$(date --date="@${newest}")

결과:

newest is: Thu Dec 31 13:01:11 NZDT 2015

관련 정보