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日間に変更されたファイルをアーカイブファイルに出力。
    	[student@h006 work]$ find . -mtime -10 | cpio -o -H newc > /tmp/new.cpio
    	3 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. アーカイブの内容を表示
    	[student@h006 work]$ cpio -tvf < /tmp/new.cpio 
    	drwxrwxr-x   2 student  student         0 Jul 22 09:45 .
    	-rw-r--r--   1 student  student        43 Jul 15 12:35 name.data
    	-rw-rw-r--   1 student  student        43 Jul 15 12:35 name.list
    	-rw-rw-r--   1 student  student       567 Jul 15 10:15 versions.txt
    	3 blocks
    
  3. アーカイブの内容を全て展開(ファイルが既に存在する場合は更新日付を照合し、 既存ファイルの方が新しい場合は、上書きしない)
    	[student@h006 work]$ cpio -iv < /tmp/new.cpio 
    	.
    	name.data
    	name.list
    	cpio: versions.txt not created: newer or same age version exists
    	# ファイル versions.txt はアーカイブより新しいので上書きしない。
    	versions.txt
    	3 blocks
    
  4. アーカイブの内容を全て展開(更新日付を無視し、アーカイブの内容を展開)
    	[student@h006 work]$ cpio -iuv < /tmp/new.cpio 
    	.
    	name.data
    	name.list
    	versions.txt
    	3 blocks
    
  5. アーカイブの一部を展開( r オプションは、ファイルを上書きする祭に元のファ イルを置き換えます。)
    	[student@h006 work]$ cpio -ir < /tmp/new.cpio 
    	rename . -> 
    	rename name.data -> name.new	# 既存のファイル名を修正する場合は、ファイル名を
    	rename name.list -> 		# 上書きの場合は単に[Enter]を入力
    	rename versions.txt -> 
    	3 blocks
    	[student@h006 work]$ ls
    	MM20180708.txt  name.data  name.list  name.new  versions.txt
    
  6. データの並び換え
    # 8バイトのテキストデータを作成(改行コードを除くため、
    echo コマンドの継続行(\c)を用いている。
    	[student@h006 work]$ echo -e "1234ABCD\c" > a.dat
    	[student@h006 work]$ cpio -o > data.cpio
    	a.dat
    	^D
    	1 block
    
    # 32bit中 8bitづつを全て並び換え
    	[student@h006 work]$ cpio -iub < data.cpio;cat a.dat
    	1 block
    	4321DCBA[student@h006 work]$ 
    
    # 16bit中 8bitづつ並び替え
    	[student@h006 work]$ cpio -ius < data.cpio;cat a.dat
    	1 block
    	2143BADC[student@h006 work]$ 
    
    # 32bit中 16bitづつを入替え
    	[student@h006 work]$ cpio -iuS < data.cpio;cat a.dat
    	1 block
    	3412CDAB[student@h006 work]$ 
    
  7. cpio の tar フォーマット
    アーカイブ作成時に tar フォーマットを指定することで、表示や展開は tar コマンドを用いることができます。
    	[student@h006 work]$ find . -name "name*" | cpio -ovH ustar > /tmp/bkup.tar
    	./name.data
    	./name.list
    	6 blocks
    	[student@h006 work]$ tar tvf /tmp/bkup.tar
    	-rw-r--r-- student/student  43 2018-07-22 10:09 name.data
    	-rw-rw-r-- student/student  43 2018-07-22 10:09 name.list
    

Section Next | Prev

Copyright 2007-2018 ycosSystems Bkup/Body252.html