아카이브 생성 시간 최적화

아카이브 생성 시간 최적화

현재 저는 다음 명령을 사용하여 7일보다 오래된 파일이 포함된 아카이브를 생성하고 있습니다.

find /var/tunningLog/ -type f -mtime +7 -print0 | tar -czf "/var/tunningLog/$(date '+%Y-%m-%d').tar.gz" --null -T - && echo "OK" || echo "NOK"

하지만 시간이 오래 걸립니다(현재 /var/tunningLog/49G). 프로세스 속도를 높이거나 명령을 개선할 수 있는 방법이 있습니까? 감사해요

답변1

/var/TuningLog에서 아카이브를 생성 중이므로 /var/TuningLog생성하는 아카이브에는 일주일 전 또는 그 이전에 생성된 아카이브가 포함되어 있습니다. 귀하의 프로필은 계속해서 증가하고 있습니다.

원하는 파일이 제외되지 않으면 를 수정하여 find해당 파일을 제외하십시오( ).\! -name '*.tar.gz'

또는

프로필을 다른 곳에 저장하세요.

답변2

파이프 사용은 find | tar코드를 재사용하는 유일한 방법이 파이프를 통해 명령을 결합하는 것뿐이었던 UNIX 시대의 유물입니다.

stat(2)각 파일에 대해 두 번 실행해야 하기 때문에 속도가 느립니다.

  • 명령에서 find(1)관심 있는 파일이 식별 되면

  • tar(1)tar에는 보관을 위한 메타데이터가 필요하므로 다른 시간은 내부에서 나옵니다.

'33년부터는 공유 라이브러리를 이용하여 재사용 가능한 코드를 구성하는 또 다른 방법이 있었고, '16년부터는 libfind기능을 재사용할 수 있는 방식으로 find 명령의 모든 기능을 포함시키는 방법이 있었습니다.

예를 들어 비표준 tar옵션을 사용하고 있으므로 tar 헤더 생성에 잘못된 코드로 알려진 gtar 대신 -T사용하고 있는 것 같습니다 .gtartar

확인해 보시기 바랍니다 star. 이것은 가장 오래된 무료 tar구현이며, libfind2005년 이후의 지원을 포함하고 있으며 -find명령줄 오른쪽에서 구문을 사용할 수 있는 옵션에 대한 지원을 포함하고 있습니다.find(1)-find

예를 들어 schilytools 웹 페이지의 매뉴얼 페이지를 확인하십시오.http://schilytools.sourceforge.net/man/man1/star.1.html

그러면 다음과 유사한 명령줄이 생성됩니다.

star -c -f /tmp/xxx.tar -find . -type f -mtime +7

관련 정보