Bash
用於將文件列表從一個項目複製到另一個項目的 Shell/終端/bash 命令或腳本
假設我有一個名為 my-project/ 的項目,它位於它自己的目錄中,並具有以下文件結構。
我的項目/
. ├── src │ ├── index.html │ ├── main.js │ ├── normalize.js │ ├── routes │ │ ├── index.js │ │ └── Home │ │ ├── index.js │ │ └── assets │ ├── static │ ├── store │ │ ├── createStore.js │ │ └── reducers.js │ └── styles └── project.config.js
現在假設我有一個名為 my-new-project 的新項目,它也位於它自己的目錄中,並且具有與 my-project 相同的文件結構,但它包含一個名為 my-files-to-copy.txt 的附加文件
我的新項目/
. ├── src │ ├── index.html │ ├── main.js │ ├── normalize.js │ ├── routes │ │ ├── index.js │ │ └── Home │ │ ├── index.js │ │ └── assets │ ├── static │ ├── store │ │ ├── createStore.js │ │ └── reducers.js │ └── styles ├── project.config.js └── my-files-to-copy.txt # new file added to tree
my-new-project/ 與 my-project/ 具有相同的文件結構但文件內容不同
現在假設 my-files-to-copy.txt 包含我要從 my-project/ 複製並寫入 my-new-project/ 中的相同路徑以覆蓋 my-new-project 中的現有文件的文件列表/ 在那些位置。
我的文件到copy.txt
src/main.js src/routes/index.js src/store/reducers.js project.config.js
如何使用終端/bash/shell 命令或腳本完成此操作?
我想我可能能夠做到:
cp my-project/src/main.js my-new-project/src/main.js cp my-project/src/routes/index.js my-new-project/src/routes/index.js cp my-project/src/store/reducers.js my-new-project/src/store/reducers.js cp my-project/project.config.js my-new-project/project.config.js
也許某種類型的
rsync
命令會做?但是隨著文件數量的增加,這種方法的效率會降低。我一直在尋找一種更有效的解決方案,它允許我利用包含文件列表(或至少一個腳本)的文件,而無需為每個文件編寫單獨的命令。
這就是
cpio
:複製文件列表。我總是覺得“輸入”和“輸出”方向令人困惑,並且很高興 GNU 具有--create
和--extract
.cd your/source/dir cpio --create < my-files-to-copy.txt | (cd your/dest/dir && cpio --extract)
有很多選項
cpio
可以管理諸如保留所有權/時間戳之類的事情。手冊頁將指導您。要知道的一個大問題是cpio
不會創建目錄,除非您 (a) 將它們複製到流中(例如,在要複製的文件列表中)或 (b) 使用--make-directories
提取端的選項。