索拉里斯 11
我想找到所有大于 31 天的文件,将它们 tar 并压缩 tar 文件。
我想在一条线上做到这一点。我宁愿使用 pbzip2 而不是 gzip !!!
这是我尝试的原型:
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”不起作用。而“z”调用 gzip 而不是 pbzip2
更新:
@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
假设文件名不包含换行符,POSIXly(
pbzip2
显然除外),默认情况下将文件列表归档到标准输入(并且默认情况下也将归档写入标准输出)或者使用 Solaris
tar
,这样您就可以保留P
/E
选项:-I /dev/stdin
从 stdin 获取文件列表,f -
在 stdout 上输出存档,然后通过pbzip2
like with压缩pax
。