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を作成し、それ以前のファイルを上書きすることです(すべてのファイルを1つの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

関連情報