How to use the command 'cpio' (with examples)
The ‘cpio’ command is a versatile utility for copying files in and out of archives. It supports various archive formats, including cpio’s custom binary, ASCII, crc, and tar formats. This command can be used in a variety of scenarios, such as creating archives from a list of file names, copying files and directories into an archive, and extracting files from an archive.
Use case 1: Add files from stdin to an archive
Code:
echo "file1 file2 file3" | cpio -o > archive.cpio
Motivation: The motivation behind this use case is to quickly add a list of files to an archive in cpio’s binary format. By using the ’echo’ command to generate the file names and piping it to ‘cpio -o’, we can easily create an archive without manually specifying each file name.
Explanation:
echo "file1 file2 file3"
: A command that generates a list of file names separated by spaces.|
: The pipe operator used to pass the output of the previous command as input to the next command.cpio -o
: The ‘cpio’ command with the ‘-o’ option, which specifies that files should be added to the archive.> archive.cpio
: Redirects the output of the ‘cpio’ command to a file named ‘archive.cpio’.
Example output: An archive named ‘archive.cpio’ will be created, containing the files ‘file1’, ‘file2’, and ‘file3’ in cpio’s binary format.
Use case 2: Copy files and directories to an archive in verbose mode
Code:
find path/to/directory | cpio -ov > archive.cpio
Motivation: Sometimes, it is necessary to copy an entire directory, including its subdirectories and files, to an archive. The motivation behind this use case is to provide a convenient way to achieve this by leveraging the ‘find’ command to list all the files and directories in a given path, and then using ‘cpio’ to copy them into an archive. The ‘-v’ option is added to enable verbose mode, which displays the files being copied.
Explanation:
find path/to/directory
: The ‘find’ command used to list all files and directories recursively in the specified directory.|
: The pipe operator used to pass the output of the ‘find’ command as input to the ‘cpio’ command.cpio -ov
: The ‘cpio’ command with the ‘-o’ and ‘-v’ options. ‘-o’ specifies that files should be added to the archive, and ‘-v’ enables verbose mode.> archive.cpio
: Redirects the output of the ‘cpio’ command to a file named ‘archive.cpio’.
Example output: An archive named ‘archive.cpio’ will be created, containing all the files and directories in the ‘path/to/directory’ path. The verbose mode will display the details of each file being copied.
Use case 3: Extract files from an archive, preserving directory structure in verbose mode
Code:
cpio -idv < archive.cpio
Motivation: When working with archives, it is often necessary to extract the files and directories while preserving the original directory structure. This use case provides a straightforward way to achieve this by using the ‘cpio’ command with the ‘-i’ option to extract files, the ‘-d’ option to generate directories when needed, and the ‘-v’ option to enable verbose mode for tracking the extraction progress.
Explanation:
cpio -idv
: The ‘cpio’ command with the ‘-i’, ‘-d’, and ‘-v’ options. ‘-i’ specifies that files should be extracted from the archive, ‘-d’ generates directories when needed, and ‘-v’ enables verbose mode.< archive.cpio
: Reads the contents of the ‘archive.cpio’ file as input to the ‘cpio’ command.
Example output: The files and directories stored in the ‘archive.cpio’ file will be extracted while preserving their original directory structure. The verbose mode will display the details of each file being extracted.