날짜 이후 mtime 및 grep을 사용하여 파일 압축

날짜 이후 mtime 및 grep을 사용하여 파일 압축

거기에는 많은 단서가 있지만 전체 해트트릭을 포괄하는 단서는 없습니다. tar2019-06-30(±760일)보다 최신인 디렉터리 트리의 모든 파일을 시도하고 있지만 이름이 붙은 파일은 무시하고 backup수십 가지 옵션을 살펴보았는데 다음과 같습니다.

tar -cvzf newest-files.tar.gz --newer-mtime "760 days ago" client_images/ | grep -v 'backup'

이것은 올바른 필터링(날짜 및 무시)을 수행하지만 아무것도 압축하지 않습니다( empty archive오류).

sudo find client_images/. -mtime -760 | grep -v 'backup'

어떻게 일어나는지 알 수 없습니다 tar.

 | tar -cvzf files.tar.gz

내가 무엇을 놓치고 있나요?

감사해요.

고쳐 쓰다:

이것은 내 시스템 관리자(익명을 유지하길 원하는)가 보낸 것입니다:

명령줄은 찾은 각 파일에 대해 tar 명령을 실행하고 해당 파일에 대한 새 tar 아카이브(항상 최신 파일.tar.gz라고 함)를 생성(-c)한 다음 파일을 tar로 변환하고 해당 tar 아카이브로 압축합니다. 따라서 결국에는 "find" 명령으로 찾은 마지막 파일을 포함하는 tar 아카이브가 남게 되며 이전의 모든 tar 아카이브는 덮어쓰기됩니다(항상 이름이 같기 때문입니다).

이를 방지하려면 생성(-c) tar 옵션 대신 추가(-r)를 사용해야 합니다. 안타깝게도 이는 하나의 명령으로 압축하는 경우에는 작동하지 않으므로 별도의 단계에서 수행해야 합니다. 압축이 필요하지 않으면 압축하면 됩니다. 그래서,

$ find client_images -type f -mtime -760 -exec tar -rvf newestfiles.tar 
--exclude '*mcith'* {} \; 
$ gzip newestfiles.tar 

답변1

노력하다

find client_images -type f -mtime -760 -print0 | tar cvzf files.tar.gz --files-from=- --null --exclude=\*backup\*

find이는 디렉터리가 아닌 파일만 일치하고 lf로 구분된 이름 대신 NUL로 구분된 이름을 출력해야 함을 나타냅니다 (이상한 파일 이름을 안전하게 처리하기 위해). 그 이유는 tar기회가 주어지면 디렉토리 자체로 재귀되기 때문입니다 .

tar보관할 파일 목록을 표준 입력(--files-from=-)에서 읽고 NUL로 구분된(--null)로 처리되도록 하는 옵션이 추가되었습니다 . --exlude는 불필요한 파일을 보관하는 것을 방지합니다.

아, 그리고 저는 침대에서 아이패드로 타이핑을 하고 있기 때문에 이것은 모두 테스트되지 않았으며 작동하지 않을 수도 있습니다.

답변2

2005년 이전에는 사용하려는 접근 방식이 적절했지만 2005년 이후에는 도움이 될 수 있는 모든 프로그램에 libfind이러한 기능을 통합하는 것이 가능해졌습니다 find(1).

따라서 다음과 같이 시도해 보십시오.

star -cz -f newest-files.tar.gz  -find client_images -mtime -760 ! -path '*backup*'

starschilytols의 일부이며 잘 관리되는 모든 배포판에 대해 바이너리 패키지로 제공됩니다.

관련 정보