Section Next | Prev


2.5.2 アーカイブの入出力(cpio)

【機能説明】
cpio は標準入力よりファイル名を読み取って、アーカイブファイルを標準出力へ 出力します。
tar と違いファイル名を個々に指定出来るため、find(1) 等と組み合わせて 複雑な条件のバックアップが可能です。

【入力フォーマット】
cpio ファンクションフラグ[オプション]

tar と同様にファンクションフラブで機能が大きく変わります。
ファンクションフラブが3種類あり、以下の意味があります。

o (output)
ファイル群をまとめあげ、アーカイブを作成します。
i (input)
アーカイブを入力し、個々のファイルを表示・展開します。
p (path)
ファイル群を別のディレクトリにコピーします。

【主なオプション】
-H フォーマット
拡張されたフォーマットを指定します、おもなフォーマットは以下のとおり
  • oldc (デフォルト)
    旧来のフォーマットですが、大容量ディスク(inodeが65535を超える場合)には対応していません。
  • newc
    拡張された CPIOフォーマット
  • ustar
    POSIX tar フォーマット(生成したアーカイブを tar で利用できる)

-b, s, S
コピーインフラグが i の時、データ並び換えを行います。
b はワード ( 4Byte ) 中のデータをバイト単位に入れ換え、 s はハーフワード ( 2byte ) 中のバイトを入れ換え、 S はワード中のハーフワードを入れ換えます。
-d
階層を伴うデータをコピーする祭に、サブディレクトリを作成します。
-f
指定されたパターンに一致しないファイルをコピーします。
-r
会話形式でファイルのリネームを行います。
-u
無条件にファイルをコピー(上書き)します。 指定しない場合は、新しいファイルに対して古いファイルを上書きする事はありません。
-v
詳細メッセージ表示
-t
アーカイブの一覧表示。コピーはしません。

【実行例】
  1. 最近10日間に変更されたファイルをアーカイブファイルに出力。
    	$ find . -mtime -10 -print | cpio -o -H newc < /tmp/new.cpio
    	9 blocks
    
    	# 大容量システムでは警告メッセージが出力される場合があります
    	$ find . -mtime -10 -print | cpio -o  < /tmp/new.cpio
    	cpio: txtana: truncating inode number
    	cpio: cpio: truncating inode number
    	cpio: fbiff: truncating inode number
    	8 blocks
    
    
  2. アーカイブの内容を表示
    	$ cpio -tvf <  /tmp/new.cpio
    	drwxr-xr-x   3 ycos     users           0 Nov 11 14:51 .
    	-rwxr-xr-x   1 ycos     users         496 Nov  3 16:28 clean
    	-rwxr-xr-x   1 ycos     users        2509 Nov  3 13:23 allip
    	-rwxr-xr-x   1 ycos     users         559 Nov  3 18:06 txtana
    	-rw-r--r--   1 ycos     users           0 Nov 11 14:49 cpio
    	-rwxr-xr-x   1 ycos     users         211 Nov  3 15:09 fbiff
    
  3. アーカイブの内容を全て展開(ファイルが既に存在する場合は更新日付を照合し、 既存ファイルの方が新しい場合は、上書きしない)
    	$ cpio -iv <  /tmp/new.cpio
    	.
    	clean
    	allip
    	cpio: txtana not created: newer or same age version exists
    	txtana	# txtana はアーカイブより新しいため上書きしない
    	cpio
    	fbiff
    	8 blocks
    
  4. アーカイブの内容を全て展開(更新日付を無視し、アーカイブの内容を展開)
    	$ cpio -iuv < tmp/new.cpio
    	.
    	clean
    	allip
    	txtana
    	cpio
    	fbiff
    	8 blocks
    
  5. アーカイブの一部を展開( r オプションは、ファイルを上書きする祭に元のファ イルを置き換えます。)
    	$ cpio -ir < tmp/new.cpio
    	rename . ->
    	rename clean -> clean.bkup	# 既存のファイル名を修正する場合は、ファイル名を
    	rename allip ->			# 上書きの場合は単に [Enter]を入力
    			:
    	$ ls -l clean*
    	-rwxr-xr-x  1 ycos users 496 11月 11 15:32 clean
    	-rwxr-xr-x  1 ycos users 496 11月 11 15:34 clean.bkup
    
  6. データの並び換え
    # 8バイトのテキストデータを作成(改行コードを除くため、
    echo コマンドの継続行(\c)を用いている。
    	$ echo -e "1234ABCD\c" > a.dat
    	$ cpio -o > data.cpio
    	a.dat
    	^D
    	1blocks
    
    # 32bit中 8bitづつを全て並び換え
    	$ cpio -iub < data.cpio; cat a.dat; echo ""
    	a.dat
    	1 block
    	4321DCBA
    
    # 16bit中 8bitづつ並び替え
    	$ cpio -ius < data.cpio; cat a.dat; echo ""
    	a.dat
    	1 block
    	2143BADC
    
    # 32bit中 16bitづつを入替え
    	$ cpio -iuS < data.cpio; cat a.dat; echo ""
    	a.dat
    	1 block
    	3412CDAB
    
  7. cpio の tar フォーマット
    アーカイブ作成時に tar フォーマットを指定することで、表示や展開は tar コマンドを用いることができます。
    	$ find . -name "*.bkup" -print | cpio -ovH ustar > /tmp/bkup.tar
    	./allip.bkup
    	./clean.bkup
    	./txtana.bkup
    	./fbiff.bkup
    	15 blocks
    
    	$ tar tvf /tmp/bkup.tar
    	tar: Record size = 15 blocks
    	-rwxr-xr-x ycos/users     2509 2007-11-11 15:32:14 allip.bkup
    	-rwxr-xr-x ycos/users      496 2007-11-11 15:32:14 clean.bkup
    	-rwxr-xr-x ycos/users      559 2007-11-11 15:32:14 txtana.bkup
    	-rwxr-xr-x ycos/users      211 2007-11-11 15:32:14 fbiff.bkup
    

Section Next | Prev

Copyright 2007-2018 ycosSystems Bkup/Body252.html