![이름의 시간으로 파일을 찾는 방법은 무엇입니까? [복사]](https://linux55.com/image/33169/%EC%9D%B4%EB%A6%84%EC%9D%98%20%EC%8B%9C%EA%B0%84%EC%9C%BC%EB%A1%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%B0%BE%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
파일 이름에 시간이 포함된 파일이 포함된 디렉토리가 있습니다.
./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