솔라리스에서는; 타르 볼을 찾아 추가하고 질문을 압축합니다.

솔라리스에서는; 타르 볼을 찾아 추가하고 질문을 압축합니다.

솔라리스 11

31일보다 큰 모든 파일을 찾아서 tar로 압축하고 싶습니다.

나는 이것을 한 줄로하고 싶습니다. 나는 gzip보다 pbzip2를 사용하고 싶습니다 !!!

프로토타입으로 시도한 내용은 다음과 같습니다. find /tmp -mtime +31 -type f -name "arch*" -exec sh -c 'tar -czvPfE /tmp/old_files_$(date +%F).tar.gz $0' {} \;

이것의 문제는 각 파일에 대해 이전 파일을 덮어쓰는 tar.gz를 생성한다는 것입니다(모든 파일을 하나의 tar 볼에만 저장하고 싶습니다). tar가 존재하지 않으면 "r"은 작동하지 않습니다. 그리고 "z"는 pbzip2가 아닌 gzip을 호출합니다.

업데이트: @DopeGhoti Thank you. First, my bad for not checking the man page for the "j" option. However, this almost worked. root@myhost:/tmp# find /tmp -mtime +31 -type f -name "arch*"| wc -l =207 root@myhost:/tmp# find /tmp -mtime +31 -type f -name "arch*"| xargs tar -cjf /tmp/old_files_$(date +%F).tbz root@myhost:/tmp# l|tail -rw------- 1 root root 1.6K Nov 30 15:59 old_files_2017-11-30.tbz root@myhost:/tmp# bunzip2 old_files_2017-11-30.tbz root@myhost:/tmp# tar tf old_files_2017-11-30.tar|wc -l =15

답변1

파일 이름에 개행 문자가 포함되어 있지 않다고 가정하면 POSIXly( pbzip2분명한 것은 제외)는 기본적으로 stdin에 보관할 파일 목록을 가져오고 기본적으로 stdout에 아카이브를 기록합니다.

find /tmp -mtime +31 -type f -name "arch*" | pax -w | pbzip2 > file.tar.bz2

또는 / 옵션을 tar유지할 수 있도록 Solaris를 사용하려면 :PE

find /tmp -mtime +31 -type f -name "arch*" |
  tar cvPEf - -I /dev/stdin | pbzip2 > file.tar.bz2

-I /dev/stdinstdin에서 파일 목록을 가져오고 f -stdout에서 아카이브를 출력한 pbzip2다음 pax.

관련 정보