
솔라리스 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를 사용하려면 :P
E
find /tmp -mtime +31 -type f -name "arch*" |
tar cvPEf - -I /dev/stdin | pbzip2 > file.tar.bz2
-I /dev/stdin
stdin에서 파일 목록을 가져오고 f -
stdout에서 아카이브를 출력한 pbzip2
다음 pax
.