Solaris

在 Solaris 上;查找、附加到 tar 球並壓縮問題

  • November 30, 2017

索拉里斯 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顯然除外),預設情況下將文件列表歸檔到標準輸入(並且預設情況下也將歸檔寫入標準輸出)

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

或者使用 Solaris tar,這樣您就可以保留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 上輸出存檔,然後通過pbzip2like with壓縮pax

引用自:https://unix.stackexchange.com/questions/408013