Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ar(1)

find(1)

cpio(5)

cpio(1)

Name

cpio − copy file archives in and out

Syntax

cpio −o [keys]

cpio −i [keys] [patterns]

cpio −p [keys] directory

Description

The cpio command is a filter designed to let you copy files to or from an archive.  The cpio command differs from the ar command in that cpio lets you archive any kind of file, while ar is limited to program object files.

Options

−i Copies files that match the specified pattern.  If the pattern is not specified, copies in all files.  Extracts files from the standard input, which is assumed to be the product of a previous cpio −o, and places them into the user’s current directory tree.  For files with the same name, the newer file replaces the older file unless the −u option is used. 

Only files with names that match patterns are selected.  The patterns are specified using the notation for names described in sh(.). In patterns, the slash for directories (/) is included in searches using meta-characters.  For example, suppose the archive contains the file filep and the pathname information in the archive indicates that the directory below contains the file file2p. This command copies both files into the user’s current directory:

cpio -i *p < /dev/rmt0l

Multiple patterns may be specified and if no patterns are specified, the default for patterns is ∗ (that is, select all files).  The extracted files are conditionally created and copied into the current directory tree based upon the options described below.  The cpio command has three function keys, each with its own set of options.

−o Copies out the specified files.  Reads the standard input to obtain a list of path names and copies those files onto the standard output together with path name and status information. 

−p Copies files into the specified destination directory, which must already exist.  Reads the standard input to obtain a list of path names of files that are conditionally created.  This list of files is copied into the destination directory tree based upon the options used.  For files with the same name, the newer file replaces the older file unless the −u option is used. 

Keys

6 Processes a file with the UNIX System Sixth Edition format. 

a Retains original access times of input files, and can be used with −o and −p.  Normally, the read(s) used in the copy update the copied file’s access time. 

B Determines input/output is to be blocked 5,120 bytes to the record.  This option is meaningful only with data directed to or from /dev/rmt?h or /dev/rmt?l.

b Swaps both bytes and halfwords. 

c Creates header information in ASCII format and can be used with −i and −o. 

d Creates subdirectories, as needed, below the specified destination directory. 

f Copies all files except those that match the specified pattern. 

k Enables symbolic link handling and is used with the −i, −o, and −p options. 

l Creates links wherever possible. 

m Retains modification time for each copied file.  This option does not work on directories or symbolic links that are being copied; the directory is always reset to show the access time when the copy was made. 

r Interactively renames files.  If you respond with a null line, the file is skipped (not copied).  Use only with the −i option. 

s Swaps bytes while copying files in. 

S Swaps half words while copying files in. 

t Prints a table of contents of the input (no files are created). 

u Copies files unconditionally.  (Otherwise, an older file will not replace a newer file with the same name). 

v Displays detailed (verbose) information as it copies and/or creates file.  When used with the t option, the table of contents looks like the output of an ls −l command.  For further information, see ls(.).

Examples

This example shows how to copy the contents of the user’s current directory into an archive. 

ls | cpio -o  > /dev/rmt0l

This example shows how to duplicate a directory hierarchy.

mkdir ~phares/newdir
cd ~phares/olddir
find . -print | cpio -pdl ~phares/newdir

This example shows how to copy all files and directories with names containing the characters "chapter" in user smith’s home directory and underlying directories.

find ~smith -name ’*chapter*’ -print | cpio -o > /dev/rmt0h

This example shows the results of using the r option with the −i function key. 

ls | cpio -ir > ~smith/newdir
Rename <file1>
newnamefile1
Rename <file2>
<RETURN>
Skipped
Rename <file3>
newnamefile3

In some cases, the −cpio option of the find command can be used more effectively than pipes and redirects using cpio. For instance, the following example

find . -print | cpio -oB > /dev/rmt0l

can be handled more efficiently by:

find . -cpio /dev/rmt0l

To copy the contents of a directory (with symbolic link handling enabled) to the tape drive, type:

ls | cpio -ok > /dev/rmt0h

To restore the archived files back into a directory, type:

cpio -ik < /dev/rmt0h

The following example moves files, including symbolic links, from an old directory to a new directory:

mkdir ~craig/newdir
cd ~craig/olddir
ls | cpio -pdk ~craig/newdir

Restrictions

Pathnames are restricted to 128 characters. 

When there are too many unique linked files, the program runs out of memory and cannot trace them.  In this case, linking information is lost. 

Only the superuser can copy special files. 

See Also

ar(1), find(1), cpio(5)

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026