2017-06-28 13 views
0

私は(100メガバイトを言う)、いくつかの最大の固定サイズで複数のtarファイルを作成制限したいサイズが異なる複数のファイルアトミックファイルを含めるディレクトリ内のtarに含めるファイルのサイズを制限できますか?

a.txt 
b.txt 
c.txt 

を持つディレクトリを持っています。私は、スプリット機能を認識してい

(ファイルサイズが一定のサイズよりも大きい場合、多分エラーをスロー)、ファイル全体がタールに含まやタールに含まれていないよう:

  • タール
  • を作成します
  • 目的のチャンクサイズで分割する

上記の方法の問題は、結果として得られるtarファイルを個別に抽出できないことです。

誰もが解決策を支援(または代替ソリューションを提供します)でし

答えて

0

次のスクリプトは、二つ以上の引数を取ります。最初は、使用する一連のファイルの合計サイズ です。残りの引数はfindに渡され、 は引数としてディレクトリを与えることができます。このスクリプトでは、ファイル名 が「正常に動作している」とみなし、空白、改行、またはシェルを混乱させるようなものである が含まれないことを前提としています。

スクリプトは、指定されたサイズに収まる最大のファイルを出力します。この は、必ずしも最もスペースを消費するファイルセットではありませんが、一般的なケースで を効率的に見つけることはナップザックの問題です。 解決する可能性は低いです。

sort -nに変更して、最小の ファイルから開始することができます。

#!/bin/sh 

avail=$1 
shift 
used=0 

find "[email protected]" -type f -print | xargs wc -c | sort -rn | while read size fn; do 
     if expr $used + $size '>' $avail >/dev/null; then 
       continue; 
     fi 
     used=$(expr $used + $size) 
     echo $fn 
done 

スクリプトの出力は、実際のアーカイブを作成するためにpax(1)に渡すことができます。 たとえば、(スクリプトfitfilesを呼び出したと仮定した場合)

sh fitfiles 10000000 *.txt | pax -w -x ustar -v | xz > wdb.tar.xz 
関連する問題