이름의 시간으로 파일을 찾는 방법은 무엇입니까? [복사]

이름의 시간으로 파일을 찾는 방법은 무엇입니까? [복사]

파일 이름에 시간이 포함된 파일이 포함된 디렉토리가 있습니다.

./test.2013-06-11_06-01.gz
./test.2013-06-12_01-01.gz
./test.2013-06-13_03-01.gz
./test.2013-06-14_03-01.gz
./test.2013-06-15_04-01.gz

파일 이름이 초과하는 경우 파일을 나열하는 방법N일앞으로?

답변1

이런 건 어때요?

maxdate=$(date -d "5 days ago" "+%Y-%m-%d");
for fn in *.gz; do
    [ "$fn" ">" "test.${maxdate}_99-99.gz" ] || echo $fn
done

날짜(아마도 시간?) 뒤의 파일 이름 부분을 무시하고 있지만 필요한 경우 파일 이름의 해당 부분을 고려하도록 수정하는 것은 상당히 쉬울 것입니다.

이 답변은 Stack Overflow에 대한 비슷한 질문을 기반으로 합니다.https://stackoverflow.com/questions/2443078/filtering-filenames-with-bash

답변2

date명령을 사용하여 N일 전 날짜를 찾은 다음 grep텍스트 파일에서 검색을 사용할 수 있습니다.

grep `date +%Y-%m-%d -d "5 days ago"` test.txt

테스트.txt:

./test.2013-06-11_06-01.gz
./test.2013-06-12_01-01.gz
./test.2013-06-13_03-01.gz
./test.2013-06-14_03-01.gz
./test.2013-06-15_04-01.gz

산출:

./test.2013-06-15_04-01.gz

오늘은 2013년 6월 20일이고, 5일 전인 2013년 6월 15일이었습니다.

고쳐 쓰다

내가 사용한 최종 솔루션은 작은 스크립트였습니다.

#!/bin/bash

FILE=$1
tmp="/tmp/tmp_$$.txt"
tmp1="/tmp/tmp1_$$.txt"
maxday=$2

cp $FILE $tmp

for i in `seq 1 $maxday`
do
    date_point=`date +%Y-%m-%d -d "$i days ago"`
    grep -v "$date_point" $tmp > $tmp1
    cp $tmp1 $tmp
done

echo "Files match:"
cat $tmp
rm -rf $tmp
rm -rf $tmp1

스크립트는 N일보다 오래된 모든 파일을 출력에서 ​​제거하므로 N일보다 오래된 모든 파일을 찾으려면 를 정의해야 합니다. maxday = N - 1즉, 8일보다 오래된 파일을 보관하려면 다음을 수행합니다.

./test.sh test.txt 7

산출:

Files match:
./test.2013-06-11_06-01.gz
./test.2013-06-12_01-01.gz

관련 정보