Linux基礎命令—cpio

一生有你llx發表於2018-12-14
cpio
      從歸檔中複製檔案,或者複製檔案到歸檔中。此命令的適用範圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
      Cpio命令有三種工作模式:
      1)copy-out mode,cpio指令將檔案複製到歸檔。它讀取標準輸入上的檔名列表(每行一個),將歸檔包寫到標準輸出。
      2)copy-in mode,cpio指令從歸檔中複製檔案,從標準輸入讀取歸檔包。
      3)cpio-pass mode,從目錄樹複製檔案到另一個目錄,它從標準輸入中讀取要複製的檔案列表。


1、語法
      cpio  -o  namelist  > archive 
      cpio  -i  <  archive
      cpio  -p  dst-dir  < namelist


2、選項列表
      -? | –help
            幫助資訊
      –version
            顯示命令版本資訊

      主操作模式
      -i | –extract
            從包中提取檔案,copy-in模式
      -o | –create
            建立包,copy-out模式
      -p | –pass-through
            執行copy-pass模式
      -t | –list
            列印輸入內容列表
      -l | –list
            對於每一個壓縮的檔案,列出壓縮檔案大小、解壓大小、壓縮比列、壓縮前的檔名字
     
      應用在所有模式的選項
      -B
            設定IO塊的大小為5120位元組
      -c
            使用老式跨平臺的歸檔格式
      -f
            僅拷貝不匹配任意給定模式的檔案
      -F
            用檔名代替標準輸入和輸出
      -n | –numeric-uid-gid
            在內容列表的詳細資訊中顯示uid和gid
      –quite
            不列印以拷貝的塊數
      -v | –verbose
            詳細資訊
      -V | -dot
            每處理一個檔案就列印一個“.”
      應用於copy-in的徐昂想

      -b | –swap

      -r | –rename
            互動式重新命名
      -E
            把指定檔案的內容當做匹配字串
      應用於copy-out的選項

      -A | –append
            追加到文件的結尾
      -O
            使用包檔名,而不是標準輸入輸出
     
       應用於copy-pass的選項
      -l | –link
            在執行時儘可能建立連結,而不是複製檔案
      應用於copy-in和copy-out

      –absolute-filenames
            檔名不出去檔案系統字首
      –no-absolute-filenames
            當前目錄建立所有檔案
      
      應用於copy-out和copy-pass
      -0 | –null
            輸入檔名以null字元結尾
      -a | –reset-access-time
            檔案讀取後,還原檔案的訪問時間
      -I
            從檔案讀入
      -R | –owner
            設定所有檔案的組合使用者資訊
     
       應用於copy-in和copy-pass
      -d
            必要時建立目錄
      -m
            建立檔案是,保留檔案修改時間屬性
      -u
            無條件覆蓋


3、例子程式碼

      % ls | cpio -ov > directory.cpio
      歸檔當前目錄下的內容,並且制定輸出檔案
      % find . -print -depth | cpio -ov > tree.cpio
      存檔整個目錄樹,find命令可以將檔案列表提供給cpio。這將獲取當前目錄中的所有檔案,以及下面的目錄,並將它們放置在歸檔目錄tree.cpio中
      % cpio -iv < directory.cpio
      這將檢索存檔在檔案directory.cpio中的檔案,並將它們放在當前目錄中
      % cpio -idv < tree.cpio
      這將獲取存檔tree.cpio的內容,並將其解壓縮到當前目錄。
      % find . -depth -print0 | cpio –null -pvd new-dir
      將當前目錄的檔案和子目錄複製到一個名為new-dir的新目錄中

4、例項
1)將當前目錄歸檔
      [root@localhost weijie]# ls | cpio -o > mybak           //將ls的輸出定向到cpio,然後歸檔
      1 塊
      [root@localhost weijie]# ls
      11.c  1.c  2.c  3.c  4.c  5.c  6.c  mybak
2)從歸檔中提取檔案
      [root@localhost weijie]# cpio -i < mybak                   //從歸檔中提取
      cpio: 未建立 11.c:已有更新或同樣新的版本存在
      cpio: 未建立 5.c:已有更新或同樣新的版本存在
      cpio: 未建立 6.c:已有更新或同樣新的版本存在
      cpio: 未建立 mybak:已有更新或同樣新的版本存在
      1 塊
      [root@localhost weijie]# ls
      11.c  1.c  2.c  3.c  4.c  5.c  6.c  mybak
3)拷貝檔案
      [root@localhost weijie]# cat list.c 
      1.c
      2.c
      3.c
      [root@localhost weijie]# cpio -p bak/ < list.c          //將list.c中的內容當做檔案列表,然後拷貝到bak目錄
      cpio: 忽略空行
      1 塊
      [root@localhost weijie]# ls bak/
      1.c  2.c  3.c