星期二, 6月 14, 2011

cpio的pass through

以前沒想過 cpio 的 pass through 可以做什麼,今天要不是有朋友問我,我大概也不會想到這個。是這樣子的,假定有個目錄 a,裏面有很多目錄跟檔案,可是只要複製 a/b/c/file.txt 跟 a/b/file2.txt 到目錄 t 下,可是沒辦法用 cp -r,因為 cp -r 會把整個 a 都複製過去,總不能先複製過去以後再一個一個刪除吧? 本想說這可能要寫 script 來做了,打了 cp,按了 tab,看有沒有什麼可能的指令可用,就看到 cpio,印象中,cpio 可能是可以。

最初的想法是用兩個 cpio 來做,一個建 archive(cpio -o),一個解到指定的目錄(cpio -i),這樣就行了。用 info cpio 一查,發現 cpio -p 應該就可以做了。

所以試了一下,這裡先建立一個 list 檔案,裏面有兩行:a/b/c/file.txt 跟 a/b/file2.txt,a 目錄下有很多目錄跟檔案,並且有 a/b/c/file.txt 跟 a/b/file2.txt。那麼這兩行指令就可以只把list裡指定的兩個檔案複製到 t 目錄下,並且建立必要的目錄:
mkdir -p t
cat list | cpio -p --make-directories t

沒有留言: