Cpio Command in Linux/Unix With Examples | Code Factory


Donate : Link

Medium Blog : Link

Applications : Link

cpio stands for “copy in, copy out“. It is used for processing the archive files like *.cpio or *.tar. This command can copy files to and from archives.

Synopsis:

  • Copy-out Mode: Copy files named in name-list to the archive
cpio -o < name-list > archive
  • Copy-in Mode: Extract files from the archive
cpio -i < archive
  • Copy-pass Mode: Copy files named in name-list to destination-directory
cpio -p destination-directory < name-list
Usage: cpio [OPTION...] [destination-directory]
GNU `cpio' copies files to and from archives

Examples:
  # Copy files named in name-list to the archive
  cpio -o < name-list [> archive]
  # Extract files from the archive
  cpio -i [< archive]
  # Copy files named in name-list to destination-directory
  cpio -p destination-directory < name-list

 Main operation mode:
  -i, --extract              Extract files from an archive (run in copy-in
                             mode)
  -o, --create               Create the archive (run in copy-out mode)
  -p, --pass-through         Run in copy-pass mode
  -t, --list                 Print a table of contents of the input

 Operation modifiers valid in any mode:

      --block-size=BLOCK-SIZE   Set the I/O block size to BLOCK-SIZE * 512
                             bytes
  -B                         Set the I/O block size to 5120 bytes
  -c                         Identical to "-H newc", use the new (SVR4)
                             portable format. If you wish the old portable
                             (ASCII) archive format, use "-H odc" instead.
  -C, --io-size=NUMBER       Set the I/O block size to the given NUMBER of
                             bytes
  -D, --directory=DIR        Change to directory DIR
      --force-local          Archive file is local, even if its name contains
                             colons
  -H, --format=FORMAT        Use given archive FORMAT
      --quiet                Do not print the number of blocks copied
  -R, --owner=[USER][:.][GROUP]   Set the ownership of all files created to the
                             specified USER and/or GROUP
  -v, --verbose              Verbosely list the files processed
  -V, --dot                  Print a "." for each file processed
  -W, --warning=FLAG         Control warning display. Currently FLAG is one of
                             'none', 'truncate', 'all'. Multiple options
                             accumulate.

 Operation modifiers valid in copy-in and copy-out modes

  -F, --file=[[USER@]HOST:]FILE-NAME
                             Use this FILE-NAME instead of standard input or
                             output. Optional USER and HOST specify the user
                             and host names in case of a remote archive
  -M, --message=STRING       Print STRING when the end of a volume of the
                             backup media is reached
      --rsh-command=COMMAND  Use COMMAND instead of rsh

 Operation modifiers valid only in copy-in mode:

  -b, --swap                 Swap both halfwords of words and bytes of
                             halfwords in the data. Equivalent to -sS
  -f, --nonmatching          Only copy files that do not match any of the given
                             patterns
  -I [[USER@]HOST:]FILE-NAME Archive filename to use instead of standard input.
                             Optional USER and HOST specify the user and host
                             names in case of a remote archive
  -n, --numeric-uid-gid      In the verbose table of contents listing, show
                             numeric UID and GID
  -r, --rename               Interactively rename files
  -s, --swap-bytes           Swap the bytes of each halfword in the files
  -S, --swap-halfwords       Swap the halfwords of each word (4 bytes) in the
                             files
      --to-stdout            Extract files to standard output

  -E, --pattern-file=FILE    Read additional patterns specifying filenames to
                             extract or list from FILE
      --only-verify-crc      When reading a CRC format archive, only verify the
                             checksum of each file in the archive, don't
                             actually extract the files

 Operation modifiers valid only in copy-out mode:

  -A, --append               Append to an existing archive.
      --device-independent, --reproducible
                             Create device-independent (reproducible) archives
      --ignore-devno         Don't store device numbers
  -O [[USER@]HOST:]FILE-NAME Archive filename to use instead of standard
                             output. Optional USER and HOST specify the user
                             and host names in case of a remote archive
      --renumber-inodes      Renumber inodes

 Operation modifiers valid only in copy-pass mode:

  -l, --link                 Link files instead of copying them, when
                             possible

 Operation modifiers valid in copy-in and copy-out modes:

      --absolute-filenames   Do not strip file system prefix components from
                             the file names
      --no-absolute-filenames   Create all files relative to the current
                             directory

 Operation modifiers valid in copy-out and copy-pass modes:

  -0, --null                 Filenames in the list are delimited by null
                             characters instead of newlines
  -a, --reset-access-time    Reset the access times of files after reading
                             them
  -L, --dereference          Dereference  symbolic  links  (copy  the files
                             that they point to instead of copying the links).

 Operation modifiers valid in copy-in and copy-pass modes:

  -d, --make-directories     Create leading directories where needed
  -m, --preserve-modification-time
                             Retain previous file modification times when
                             creating files
      --no-preserve-owner    Do not change the ownership of the files
      --sparse               Write files with large blocks of zeros as sparse
                             files
  -u, --unconditional        Replace all files unconditionally

  -?, --help                 give this help list
      --usage                give a short usage message
      --version              print program version

Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.

Examples:

  • To create a *.cpio file : We can create *.cpio files containing files and directory with the help of cpio command.

Here -ov is used as -o create the new archive and -v list the files processed.

admin# ls
file1 file2

admin# ls | cpio -ov > /home/admin/compress.cpio
compress.cpio
file1
file2
1 block
  • To extract a *.cpio file: We can extract *.cpio files containing files and directory with the help of cpio command.
admin# mkdir test

admin# cd test/

test# cpio -iv < /home/admin/compress.cpio
compress.cpio
file1
file2
1 block
  • To create *.tar archive file using cpio: The cpio helps to create a *.tar archive.
admin# ls
test1 test2

admin# ls | cpio -ov -H tar > /home/admin/file.tar
file.tar
test1
test2
5 blocks
  • To extract *.tar archive file using cpio: The cpio helps to extract *.tar files containing files and directory.
admin# mkdir test

admin# cd test

test# cpio -iv -F /home/admin/file/tar
file.tar
test1
test2
4 blocks
  • To create a *.cpio archive with selected files: We can create *.cpio files containing specific files with the help of cpio command.
admin# ls
test1 test2

admin# find . -iname "test*" | cpio -ov > /home/admin/files.cpio
./test2
./test1
1 block
  • To create a *.tar archive with selected files: We can create *.tar files containing specific files with the help of cpio command.
admin# find . -iname "test*" | cpio -ov -H tar > /home/admin/files.tar
./test2
./test1
4 blocks
  • To only view *.tar archive file using cpio: The cpio helps to view *.tar files containing files and directory.
admin# cpio -it -F /home/admin/files.tar
test2
test1
3 blocks

Leave a comment