cpioコマンドは標準入力からファイルリストを受け取ってcpio形式のアーカイブファイルを作成したり、アーカイブファイルを標準出力から受け取ってcpio形式のアーカイブファイルを展開することが出来ます。
findコマンドを用いて必要なファイルをリストしてcpioコマンドを利用してアーカイブファイルを作成したり出来ます。
cpioコマンドには主に3つの機能があり、コピーアウトモード(copy-out mode)、コピーインモード(copy-in mode)、コピーパスモード(copy-pass mode)になります。
目次
コピーアウトモード
コピーアウトモードは標準入力からファイルリストを受け取り、そのファイルリストから標準出力を通して、アーカイブファイルを作成するモードになります。
コピーアウトモードを使用する場合、-oオプションを用いてcpioコマンドを利用します。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 |
$find dir dir dir/file2.txt dir/file1.txt dir/file3.txt $ $find dir | cpio -o > archive.cpio 1 block $ls archive.cpio dir |
-Oオプションまたは-Fオプションでファイル名を指定することで、標準出力の代わりにそのファイル名に対して、アーカイブファイルを作成します。
1 2 3 4 5 6 7 8 9 10 |
$find dir dir dir/file2.txt dir/file1.txt dir/file3.txt $ $find dir | cpio -o -O archive.cpio 1 block $ls archive.cpio dir |
コピーインモード
コピーインモードは標準入力からアーカイブファイルを受け取り、そのアーカイブファイルを展開するモードになります。
コピーインモードを使用する場合、-iオプションを用いてcpioコマンドを利用します。
archive.cpio
1 2 3 4 5 6 |
$cpio -t < archive.cpio dir dir/file2.txt dir/file1.txt dir/file3.txt 1 block |
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$cpio -i < archive.cpio 1 block $ls -lR .: 合計 8 -rw-rw-r-- 1 ubuntu ubuntu 512 6月 9 20:28 archive.cpio drwxrwxr-x 2 ubuntu ubuntu 4096 6月 9 20:29 dir ./dir: 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 6月 9 20:29 file1.txt -rw-rw-r-- 1 ubuntu ubuntu 0 6月 9 20:29 file2.txt -rw-rw-r-- 1 ubuntu ubuntu 0 6月 9 20:29 file3.txt |
-Iオプションまたは-Fオプションでファイル名を指定することで、標準入力の代わりにそのファイル名に対して、アーカイブファイルを展開します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$cpio -i -I archive.cpio 1 block $ls -lR .: 合計 8 -rw-rw-r-- 1 ubuntu ubuntu 512 6月 9 21:28 archive.cpio drwxrwxr-x 2 ubuntu ubuntu 4096 6月 9 21:28 dir ./dir: 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 6月 9 21:28 file1.txt -rw-rw-r-- 1 ubuntu ubuntu 0 6月 9 21:28 file2.txt -rw-rw-r-- 1 ubuntu ubuntu 0 6月 9 21:28 file3.txt |
コピーパスモード
コピーパスモードはあるディレクトリツリーを別のディレクトリにコピーするモードになり、アーカイブファイルを介さないコピーアウトモードとコピーインモードの複合と考えることも出来ます。
コピーパスモードを使用する場合、-pオプションを用いてcpioコマンドを利用します。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ls dir dir2 $find dir dir dir/file2.txt dir/file1.txt dir/file3.txt $ $find dir | cpio -p dir2 0 blocks $find dir2 dir2 dir2/dir dir2/dir/file2.txt dir2/dir/file1.txt dir2/dir/file3.txt |
cpioコマンドのオプション
処理したファイルを表示
(-vオプション)
コピーアウト、コピーイン、コピーパスモードで利用できます。
-vオプションは処理したファイルを表示できます。cpioコマンドを利用するなら、どのモードでもとりあえず付けて実行させてもいいオプションともいえます。
コマンド例と実行結果
1 2 3 4 5 6 |
$find dir | cpio -ov > archive.cpio dir dir/file2.txt dir/file1.txt dir/file3.txt 1 block |
-vオプションは、-tオプションと組み合わせるとアーカイブファイルの内容を'ls -l'コマンドの形式でファイルを確認できます。
1 2 3 4 5 6 |
$cpio -tv < archive.cpio drwxrwxr-x 2 ubuntu ubuntu 0 Jun 9 12:49 dir -rw-rw-r-- 1 ubuntu ubuntu 0 Jun 9 12:49 dir/file2.txt -rw-rw-r-- 1 ubuntu ubuntu 0 Jun 9 12:49 dir/file1.txt -rw-rw-r-- 1 ubuntu ubuntu 0 Jun 9 12:49 dir/file3.txt 1 block |
アーカイブファイルの内容を確認
(-tオプション)
コピーインモードで利用できます。
-tオプションはアーカイブファイルの内容を確認するオプションになります。-tオプションを利用した場合、暗黙的にコピーインモードになります。
また、-vオプションと組み合わせると表示がlsコマンドの-lオプションを用いたような表示になります。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$cpio -t < archive.cpio dir dir/file2.txt dir/file1.txt dir/file3.txt 1 block $ $cpio -tv < archive.cpio drwxrwxr-x 2 ubuntu ubuntu 0 Jun 9 12:49 dir -rw-rw-r-- 1 ubuntu ubuntu 0 Jun 9 12:49 dir/file2.txt -rw-rw-r-- 1 ubuntu ubuntu 0 Jun 9 12:49 dir/file1.txt -rw-rw-r-- 1 ubuntu ubuntu 0 Jun 9 12:49 dir/file3.txt 1 block |
必要なディレクトリを作成
(-dオプション)
コピーイン、コピーパスモードで利用できます。
-dオプションは、アーカイブファイルからのファイル展開時等に必要なディレクトリが存在しないときに、自動的にディレクトリを作成します。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$cpio -t < archive.cpio dir/file2.txt dir/file1.txt dir/file3.txt 1 block $cpio -i < archive.cpio cpio: dir/file2.txt: Cannot open: No such file or directory cpio: dir/file1.txt: Cannot open: No such file or directory cpio: dir/file3.txt: Cannot open: No such file or directory 1 block $ $cpio -id < archive.cpio 1 block $ls archive.cpio dir |
既存のアーカイブファイルにファイルを追加
(-Aオプション)
コピーアウトモードで利用できます。
-Aオプションは既存のアーカイブファイルにファイルを追加できます。
-Aオプションを用いる場合は、-Oオプションまたは-Fオプションでファイルを追加したいアーカイブファイルを指定します。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ls archive.cpio file4.txt $cpio -t < archive.cpio dir/file2.txt dir/file1.txt dir/file3.txt 1 block $ $echo 'file4.txt' | cpio -oA -O archive.cpio 1 block $cpio -t < archive.cpio dir/file2.txt dir/file1.txt dir/file3.txt file4.txt 1 block |
リストファイルからファイルパターンを読み出し抽出
(-Eオプション)
コピーインモードで利用できます。
-Eオプションはリストファイルを読み込み、そのファイルパターンが記述されているファイルを抽出します。
list.txt
1 |
file1.txt |
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 |
$ls archive.cpio list.txt $cpio -i -E list.txt < archive.cpio 1 block $ls archive.cpio file1.txt list.txt $ $cpio -i -E <(echo 'file2.*') < archive.cpio 1 block $ls archive.cpio file1.txt file2.txt list.txt |
ファイルを展開する代わりにファイルの内容を標準出力へ
(--to-stdoutオプション)
コピーインモードで利用できます。
--to-stdoutオプションはファイルを展開するのではなく、そのファイルの内容を標準出力へ出力します。
ファイルの内容
1 2 3 4 5 6 7 8 9 |
$head file* ==> file1.txt <== file1.txt content ==> file2.txt <== file2.txt content ==> file3.txt <== file3.txt content |
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$cpio -i --to-stdout < archive.cpio file1.txt content file2.txt content file3.txt content 1 block $ $ls archive.cpio $cpio -i -E <(echo 'file1.txt') --to-stdout < archive.cpio file1.txt content 1 block $cpio -i -E <(echo 'file1.txt') --to-stdout < archive.cpio 2>/dev/null file1.txt content |