tar를 사용하여 ls 결과 압축

tar를 사용하여 ls 결과 압축

특정 월별로 로그 파일을 압축하고 싶습니다. 모든 파일을 나열하려면 다음 명령을 사용하십시오.

ll | grep 'Sep' | grep 'oim_server'

그런 다음 결과를 tar로 압축해야 합니다. 어떻게 해야 합니까?

답변1

9월에 수정된 모든 파일 찾기:

find . -type f -newermt 2016-09-01 ! -newermt 2016-10-01

아카이브에 파일 첨부:

tar -rvf archive.tar filename

이제 exec를 사용하여 두 가지를 결합합니다.

find . -type f -newermt 2016-09-01 ! -newermt 2016-10-01 -exec tar -rvf logs_sept.tar {} +

답변2

특정 연도 9월에 마지막으로 수정되었으며 이름에 다음이 포함된 숨김되지 않은 파일(디렉터리를 포함한 모든 유형)을 보관하려는 경우 파일은 사용자와 연결되지만 oim_server이는 명령의 의도와 같습니다. ll | grep 'Sep' | grep 'oim_server'/ 그룹/일치) 파일 이름/기호 링크 대상에는 Sep또는 oim_server)가 포함되어 있습니다. GNU 시스템에서는 다음을 수행할 수 있습니다.

find . -mindepth 1 -maxdepth 1 ! -name '.*' \
       -name '*oim_server*' -printf '%Tm:%p\0' |
  sed -zn 's/^09://p' |
  tar --null --no-recursion -T - -cvvf - |
  xz > file.tar.xz

( --no-recursion아니요또한 9월에 내용이 마지막으로 수정된 디렉토리도 보관합니다.

압축하지 않고 단지 아카이브만 한다는 점에 유의하십시오 tar(나중에 있는 그대로 복원할 수 있도록 데이터와 메타데이터가 포함된 파일을 테이프나 파일에 수집). 출력을 위의 압축기로 파이프하여 xz압축된 아카이브를 얻을 수 있습니다. GNU와 같은 일부 tar구현에서는 tar이러한 압축기 자체를 호출할 수 있습니다( -J/ 는 최신 버전의 GNU에서 압축에 사용됩니다 --xz).xztar

필터링된 출력에 표시된 파일을 보관하려면 ls다음을 수행할 수 있습니다.

ll | grep Sep | grep oim_server |
  awk '{print $NF}' |
  tar  --no-recursion -T - -cvvf - |
  xz > file.tar.xz

이를 다음과 같이 단순화할 수 있습니다.

ll | awk '/Sep/ && /oim_server/ {print $NF}' |
  tar  --no-recursion -T - -cvvf - |
  xz > file.tar.xz

그러나 여기에는 많은 제한 사항이 있습니다.

  • 월 필드뿐만 아니라 전체 행을 검색합니다 grep Sep. Sep여기에는 사용자 및 그룹 이름, 파일 이름, 기호 링크 대상이 포함됩니다.
  • Sep9월에 마지막으로 수정된 파일의 경우 일부 영어 로케일에서만 사용할 수 있습니다.
  • Sep위의 것과 마찬가지로 oim_server온라인 어디에서나 찾을 수 있습니다.
  • 파일 이름에는 개행 문자가 포함될 수 있으므로 일반적으로 파일 이름이 한 줄만 차지한다고 가정하는 것은 실수입니다.
  • 더 나쁜 것은 awk '{print $NF}'각 줄의 마지막 단어가 인쇄된다는 것입니다. 즉, 공백이 포함된 파일 이름이나 심볼릭 링크에서는 작동하지 않습니다(심볼릭 링크 대상의 마지막 단어가 출력됩니다).

관련 정보