acct.20111001
최대 파일 이름을 가진 많은 로그 파일이 포함된 디렉토리가 있습니다 acct.20111030
. 다음을 실행하여 압축하고 싶습니다.
tar -cvjf acct.20111001.bz2 acct.20111001
각 파일에 대해 명령을 실행 하지 않고 어떻게 find
압축 할 수 있나요?tar
나는 이와 같은 것을 생각하고 있었지만 이 명령이 작동하지 않는다는 것을 알고 있습니다.
find /home/log/2011/10 -name "acct.201110[0-9]" -exec tar -cvjf {}.bz2 {} \;
답변1
사용중인 정규식은 to 범위의 모든 파일 find
과 일치하지 않습니다 .acct.20111001
acct.20111030
마지막 숫자를 잊어버렸어. 당신도 일치 할 수 있다면 acct.20111000
(존재한다면 이름의 날짜 모양에서 의심 스럽습니다) 다음을 사용할 수 있습니다
find /home/log/2011/10 -name "acct.201110[0-3][0-9]" -exec tar -cvjf {}.bz2 {} \;
또 다른 옵션은 특히 작업할 파일이 거의 없는 경우(수백 개 미만) find
간단한 방법을 대신 사용하는 것입니다.for
루프로 변경합니다. 그런 다음 사용할 수 있습니다범위 표현그러면 0으로 채워진 숫자 목록이 생성됩니다.
for file in acct.201110{01..30}; do tar -cvjf $file.bz2 $file; done
acct.20111001
통과한 경우 acct.20111030
가능한 다른 옵션이 있습니다.다음으로 시작하는 유일한 파일acct.201110
(역시 이것이 사실인지 의심스럽습니다.) - 그러면 acct.201110*
위의 명령 중 하나를 사용할 수 있습니다.
답변2
그것은 마치
for file in acct.201110[0-9]; do tar -cvjf $file.bz2 $file; done
작동해야 하지만(아마도 하루 종일 캡처할 수 있는 더 나은 전역 보기가 있을 수 있음) 질문이 다음과 같습니다.logrotate
또는새로운 시스템 로그당신이 필요할 수도 있습니다.
답변3
필요한 도구는 다음과 같습니다.CPIO(1). 그러면 표준 입력에서 파일 목록을 가져오고 아카이브가 생성됩니다. -H tar
tar 형식으로 아카이브를 생성해야 하는 경우 이 옵션을 사용하십시오 .