특정 월별로 로그 파일을 압축하고 싶습니다. 모든 파일을 나열하려면 다음 명령을 사용하십시오.
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
).xz
tar
필터링된 출력에 표시된 파일을 보관하려면 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
여기에는 사용자 및 그룹 이름, 파일 이름, 기호 링크 대상이 포함됩니다. Sep
9월에 마지막으로 수정된 파일의 경우 일부 영어 로케일에서만 사용할 수 있습니다.Sep
위의 것과 마찬가지로oim_server
온라인 어디에서나 찾을 수 있습니다.- 파일 이름에는 개행 문자가 포함될 수 있으므로 일반적으로 파일 이름이 한 줄만 차지한다고 가정하는 것은 실수입니다.
- 더 나쁜 것은
awk '{print $NF}'
각 줄의 마지막 단어가 인쇄된다는 것입니다. 즉, 공백이 포함된 파일 이름이나 심볼릭 링크에서는 작동하지 않습니다(심볼릭 링크 대상의 마지막 단어가 출력됩니다).