![최신 파일 이름 검색](https://linux55.com/image/81617/%EC%B5%9C%EC%8B%A0%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%20%EA%B2%80%EC%83%89.png)
파일을 찾기 위해 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
답변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