많은 XML 파일이 저장된 폴더가 있는데 폴더 이름은 "yyyymmdd" 형식입니다(예: 20180515). 그런 폴더가 7일 동안 커지면 압축할 수 있는 스크립트를 원합니다. 실제 경로: /test/xml_files/yyyymmdd/*.xml.
답변1
디렉터리의 날짜 형식이 주어지면 간단한 쉘 스크립트를 사용하여 마감일을 계산한 다음 모든 관련 디렉터리를 반복하여 마감일보다 빠른지(더 적은지) 물어볼 수 있습니다.
#!/bin/sh
cutoff=$(date -d "7 days ago" +%Y%m%d)
for d in [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
do
if [ $d -lt $cutoff ] && [ ! -f "${d}".zip ]
then
zip -r "$d" "$d"
fi
done
유일한 요구 사항은 임의의 날짜를 계산할 수 있는 날짜 유틸리티(예: GNU의 유틸리티)입니다.
스크립트는 기한보다 오래되고 해당 zip 파일이 아직 존재하지 않는 디렉터리만 압축하려고 시도합니다. 원하는 경우 gzip을 대체할 수 있습니다. 조건을 tar
조정하세요 .-f
답변2
나는 주어진 경로에 날짜 이름을 가진 디렉토리만 있다고 가정합니다. 그리고 수정 날짜나 생성 날짜가 아닌 디렉터리 이름과 날짜를 비교해야 합니다.
암호
offset_date=$(date -d "-7 day" +%s) ; for i in $(ls -1) ; do if [ $(date -d $i +%s ) -gt $offset_date ] ; then echo $i ; fi ; done | xargs tar -czf directories.tar
설명: 여기서는 offset_date 변수에 7일이 넘는 epoch 날짜를 저장하고 이를 epoch로 변환한 후 디렉터리 이름과 비교하고 있습니다.
답변3
이를 달성하려면 find 명령을 사용할 수 있습니다.
find /test/xml_files/ -type d -ctime +7 -exec tar -czvf {}.tar.gz {} \;
find /test/xml_files
:/test/xml_files
검색하려는 위치입니다.-type d
: 디렉터리(파일 형식)만 찾으면 됩니다.-ctime +7
: 7일 이상 수정된 사항만 고려-exec tar -czvf {}.tar.gz {} \;
: 기본적으로tar -czvf
find로 찾은 결과에 대해 수행됩니다.
tar -czvf <output-tar-name> <input-folder-name>
c
tar를 만드는 데 사용됨z
gz 압축의 경우v
자세한 내용은f
파일용
따라서 기본적으로 find 두 가지 결과를 얻게 됩니다: 20180501
및 20180502
. 그런 다음 {}
두 개의 아카이브 tar 파일을 전달하고 생성합니다 20180501.tar.gz
.20180502.tar.gz