大量のファイルを tar したい時のメモ

大量のファイルを tar したい時のメモ
大量にあるファイルを一つずつFTPクライアントで落しても良いのですが、ものすごく時間が掛かる上、途中で止まってしまうこともあります。それならば、.tar で一塊にしてからダウンロードしたいと思うところです。
その方が、効率的ですしね。

通常であれば、 $ tar -czvf archive.tar.gz files とかして、filesディレクトリのファイルをarchive.tar.gzに固めたいところですが、如何せんファイル数が多いと、「Argument list too long.」(引数リストが長すぎます)というエラーを吐いて止まってしまいます。

そこで、一つ良い方法があるのです。
固めるファイルのリストを作り、そちらを参照しながらtarしていこうと言う事です。


まずファイルリストを作ります。
$ ls -U | find ./[ディレクトリ] -type f > file.list


※ $ ls -U ./[ディレクトリ] > file.list でも作れるのですが、ディレクトリがリストに入らないので、findしています。

暫くまつと、file.listが作られます。
中身は、ディレクトリ+ファイル名という組み合わせで、1ファイル1行毎記録されます。
./[ディレクトリ]/text1.txt
./[ディレクトリ]/text2.txt
./[ディレクトリ]/text3.txt



そして、ファイルリストを元にtarを実行します。
$ tar -czvf archive.tar.gz -T file.list

実行すると、作業しているファイルがずららら〜と表示されます。
途中で強制終了された場合には、表示されているファイル名のところで、ファイルリストを分割し、やり直して下さい。


ファイル数をチェックするには、lsを使います。
$ ls [ディレクトリ名] | wc -w

暫くすると、「1706462」というように、ファイル数が表示されます。

私は、170万のファイルをリスト化してtarしました。一つのファイルリストで作業したところ、80万ファイルくらいのところで強制終了されたため、3分割して実行しました。
一度ローカルに落して60万ファイル毎に、file1.list、file2.list、file3.listとして分割して保存、それぞれのファイルリストを使ってtarを3回やりました。
$ tar -czvf archive1.tar.gz -T file1.list
$ tar -czvf archive2.tar.gz -T file2.list
$ tar -czvf archive3.tar.gz -T file3.list



うまいやり方があるかもしれませんが、ひとまず目的が達成されて何よりです。
固めたファイルは、7-Zipを使って、Windows上で解凍することも可能です。


さくらインターネットのスタンダード以上では、SSHで接続し、Linuxのコマンドを叩く事ができます。
メンテなど楽になりますので、オススメです。



参考サイト:tarは悪く無い。大量ファイルをアーカイブするときはfile inputを使う。 (しま★りん.blog @ayurina)


□ 関連記事
「上海問屋 SATA2.5インチ ハードディスクケース」 を使ってみました。
「アイコン コンバータ」 緊急メンテナンスのお知らせ
「DELL XPS 8300」のSSDをSanDiskにしました。
NTFSの最終アクセス更新を制限する。
DELL Inspiron 620s のHDDをSSDへ交換・換装 しました。
I-O DATA HDCS-U500 外付けHDDの分解メモ
中古 iPhone5を購入、必要な物をまとめました。
2016.08.11

コメント投稿フォーム