UNIX - cpio 指令

【功能】

將檔案轉換成保存檔(archieve file)形式或將保存檔還原成一般檔案

【語法】

cpio -i [bBcdfkmrsStuvV6] [-C size] [-E file] [-H hdr] [-I file [-M message]] [-R ID]] [pattern...]
cpio -o [aABcLvV] [-C size] [-H hdr] [-O file [-M message]]
cpio -p [ adlLmuvV ] [-R ID]] directory

【說明】

cpio 指令主要功能是將許多個檔案轉換成一個保存檔,或是反方向將保存檔還原成一般檔案。

可依據選項的不同而達成指定的功能,其主要的選項是-i、-o、-p,這三個選項不可同時使用。各主選項功能說明如下:

主 選 項 說 明
-i(copy in)

還原功能,從標準輸入讀取保存檔的檔名還原成一般檔案,放置在目前的工作目錄下。還原過程中若發現要放入的目錄下有時間相同或較新的檔案時,cpio 指令會產生警告訊息而不會將原來的檔案內容刪除,除非以 -u 選項強迫做刪除的處理。

是用來指定還原的檔案名稱,可使用萬用字元如 '?'、'*' 等符號。在還原時檔案擁有者及群等允許權限都與使用 cpio 指令者相同,除非使用者是超級使用者才會使允許權限與在轉換前相同。

-o(copy out)

轉換功能,會從標準輸入讀取要轉換的路徑及檔案名稱,經過轉換後送到標準輸出,cpio 指令常以重新導向的方式將輸出的結果置於指定的保存檔內,以及用 find、ls 等指令來選擇要轉換的檔案名稱,再將這些名稱經過 pipe 重新導向,做為 cpio 指令的檔案名稱。

轉換後的資料多以 512 個 bytes 為最小的處理單位,除非有使用 -B 或 -C 選項改變系統的預設值。

-p(pass) 處理目錄的複製,可將一個目錄下所有的檔案複製到指定處。cpio 指令會從標準輸入讀取檔案名稱及路徑後複製到指定的位置。在這選項中,不會做保存檔的轉換及還原。

對字元特殊檔讀取(-i)或寫入(-o)資料(且無使用 -O、-I)時,若到磁性儲存體的尾端,cpio 指令會出現下面的訊息。

If you want to go on,type device/file name when ready

此時,更換磁性儲存體後,打入字元特殊檔的名稱,接著再按下 <ENTER> 鍵就可繼續處理。

【選項】

選 項 說 明
-a (access) 將檔案的存取時間更新為目前的時間。當使用 cpio -pla 指令時,對連接檔的存取時間不會更新。此選項不可與 -m 選項同時使用。
-A (append) 將檔案附加到保存檔的尾端。此選項必須與 -O 選項配合使用,用來指定保存檔的名稱。
-b 對每個字組中的 byte 以相反順序放置。此選項必須與 -i 選項配合使用。
-B (block) 輸出輸入時,以 5,120 個 bytes 為每次處理的單位。對於某些儲存設備可提高處理速度。預設每次處理的單位是 512 個 bytes。
-c 對檔案前端(header)用 ASCII字元寫入,以提高可攜性,方便於不同機器上的使用。此選項不可與 -H、-6 選項同時使用。
-C bufsize 指定每次輸出輸入處理的單位為 bufsize個 bytes。bufsize 為正整數,在無指定 -C、-B 選項使用時,預設的大小是 512 個 bytes。此選項只對字元特殊檔有意義。
-d (directory) 在必要時允許建立目錄,如在複製目錄時。
-E file (extract) 指定檔案 file,內容是要從保存檔還原的檔案名稱,file 檔案內的放置方式為每行一個檔名。
-f 將不屬於 pattern 中所指定的檔案還原。此選項只能與 -i 選項同時使用。
-H hdr (header) 對檔案前端的資料是以 hdr 的格式處理。若在不同的機器上做轉換及還原的工作,則須使用此選項或是 -c 選項。此選項不可與 -c、-6 選項共同使用。hdr 的名稱可為下面 4 種:
crc 或 CRC 使用ASCII 的檔案前端及擴充的設備號碼,且每個檔案都會加上檢查碼(check sum)。
ustar 或 USTAR 使用 IEEE/P1003 格式的標準資料交換的檔案前端。
tar 或 TAR 使用 tar 指令的檔案前端及格式。
odc 使用ASCII 的檔案前端及小型的設備號碼。
-I file (input) 從檔案 file 讀取資料代替保存檔。若 file是字元特殊檔且目前的磁性儲存體(medium)已被讀到尾端,此時可更換另一個磁性儲存體,然後按 <ENTER> 鍵使 cpio指令繼續處理。此選項必須與 -i 選項配合使用。
-k (skip) 跳過發生問題的檔案前端或輸出入錯誤的部份,只將正常、可讀取的資料還原。此選項必須與 -i 選項配合使用。
-l (link) 在可能的情形下,使用檔案連接方式而非去複製檔案。此選項必須與 -p 選項配合使用。
-L (follow) 對於符號連接檔的處理方式為將內容複製一份,預設的處理情形是只存放檔名。
-m (modification) 使檔案的修改時間不變,但對目錄無效。此選項不可與 -a 選項同時使用。
-M message 定義更換磁性儲存體時所產生的訊息。此選項常與 -O 或 -I 選項配合,並指定字元特殊檔。
-O file (output) 將 cpio 指令所產生的輸出寫到 file 檔案中,若 file 是字元特殊檔,且處理的磁性儲存體已不夠空間時,在更換後按 <ENTER> 鍵繼續處理。此選項必須與 -o 選項配合使用。
-r (interactive) 以交談的方式更改檔案名稱,若使用者只按 <ENTER> 鍵,則該檔案不處理。若使用者輸入的是 '.' 字元,則保留原來的名稱。此選項不可與 -p 選項同時使用。
-R ID (reassign) 對每個檔案設定所有者及群的識別碼。此選項只能由超級使用者使用。
-s (swap) 使半個字組中的 2 個 bytes 互換內容(每個完整的字組為 4 個 bytes)。
-S (swap) 使每個字組中 2個半字組互換內容(每個完整的字組為 4 個 bytes,半個字組為 2 個 bytes)。
-t (table) 印出保存檔內的檔案名稱。此選項不會還原檔案,僅是列出有那些檔案此選項不可與 -V 選項同時使用。
-u (unconditional) 在複製時不考慮時間的先後,一律複製。正常的情形下會去檢查檔案的時間,在複製的過程中,若發現有舊檔案會將新檔案刪除時則跳過不處理。
-v (verbose) 印出檔案名稱。當與 -t 選項共同使用時,印出的格式如同使用 ls -l 指令的輸出。
-V (verbose) 每個檔案在讀取或寫入檔案時會印出 '.' 字元,讓使用者知道現在正處理資料中,而不用將檔案名稱印出。
-6 (sixth edition) 要求使用 UNIX 系統舊版本 6 的格式來處理保存檔。此選項必須與 -i 選項配合使用,且此選項不可與 -c、-H 選項同時使用。

★註:選項 -S、-s、-b、-6 是在 SVR3 版本時才開始提供。選項 -A、-C、-E、-H、-I、-k、-L、-M、-O、-R、-V是在 SVR4 版本時才開始提供。

【範例】

1. 將指定的檔案以保存檔形式送到磁性儲存體:

$ ls -1 text* | cpio -o -O /dev/fd0
10 blocks

ls 指令會將目前工作目錄下以 text 為起始的檔案名稱列出,送到 cpio 指令做為要求轉換的檔名,轉換後的保存檔結果則送到 -O 選項所指定的 /dev/fd0 的設備上(如此將會刪除保存檔內原有的資料)。

2. 新增檔案到磁性儲存體內的保存檔:

$ cpio -oA -O /dev/fd0
data
110 blocks

下完這指令後,會要求使用者輸入要新增的檔案名稱(在此我們輸入的檔案名稱為 data),輸入後按下 <ENTER> 鍵,再按 <Ctrl-D> 鍵結束,然後將這檔案轉換後,新增到磁性儲存體上保存檔的尾端,而不會刪除原來在保存檔上原有的資料。

3. 檢查保存檔案內包含有那些檔案:

$ cpio -itv -I /dev/fd0
-rw-r--r-- 1 eric other 1804 Nov 1 21:29 1992,text1
-rw-r--r-- 1 eric other 1096 Nov 1 21:29 1992,text2
-rw-r--r-- 1 eric other 700 Nov 1 21:29 1992,text3
-rw-r--r-- 1 eric other 12 Nov 2 03:30 1992,data
10 blocks

cpio 指令中使用了 -it 選項,是從保存檔讀取資料,要求列出有那些檔案存在保存檔內,而 -v 選項則是要求列出較為詳細的資料如檔案模式、擁有者、群名稱等。選項 -I 則是用來指定保存檔案的設備名稱。

4. 將目前工作目錄下所有的檔案及子目錄儲存到保存檔:

find . -depth -print | cpio -oc >/usr/miller/m11d24

find 指令會將目前工作目錄下所有的檔案名稱(包含子目錄下的檔案)送到 cpio 指令處理。在 cpio 指令中由於使用了 -c 選項,故對檔案前端是用 ASCII 字元寫入,以提高可攜性。最後以重新導向方式把保存檔的內容存放到指定的檔案 /usr/miller/m11d24。

5. 將保存檔的資料還原到目前工作目錄:

cpio -icd </usr/miller/m11d24

要求 cpio 指令從檔案 /usr/miller/m11d24 讀取資料,然後將檔案還原放到目前的工作目錄。

6. 目錄的複製:

find . -print | cpio -pdlmv /usr/stan

首先,find 指令會將目前工作目錄下所有的檔案名稱及子目錄名稱傳給 cpio 指令,cpio 指令會將這些檔案複製到指定的目錄 /usr/stan 內,在複製的過程中不會產生保存檔。

網路電視    旅遊景點    算命    象棋殘局    回首頁