현재 저는 다음 명령을 사용하여 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
사용하고 있는 것 같습니다 .gtar
tar
확인해 보시기 바랍니다 star
. 이것은 가장 오래된 무료 tar
구현이며, libfind
2005년 이후의 지원을 포함하고 있으며 -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