날짜 패턴으로 나열된 모든 파일을 찾아 함께 묶습니다.

날짜 패턴으로 나열된 모든 파일을 찾아 함께 묶습니다.

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.20111001acct.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 tartar 형식으로 아카이브를 생성해야 하는 경우 이 옵션을 사용하십시오 .

관련 정보