Solaris에서는 타르 볼을 찾아 연결하고 문제를 압축합니다.

Solaris에서는 타르 볼을 찾아 연결하고 문제를 압축합니다.

솔라리스 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 볼에 넣기를 원합니다). "r"은 tar가 없으면 아무 효과가 없습니다. "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.

관련 정보