独自のディレクトリにあり、次のファイル構造を持つ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-projectと同じファイル構造を持っていますが、my-files-to-copyというファイルが添付されたmy-new-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-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-の既存のファイル/を上書きするファイルのリストが含まれているとします。プロジェクト/該当する場所にあります。
コピーしたいファイル.txtsrc/main.js
src/routes/index.js
src/store/reducers.js
project.config.js
ターミナル/bash/シェルコマンドまたはスクリプトを使用してこれを行うにはどうすればよいですか?
私の考えでは、次のことができるようです。
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
コマンドが動作しますか?
ただし、ファイル数が増えると、この方法の効率が低下します。私は、各ファイルに対して別々のコマンドを書く必要なしに、ファイルのリスト(または少なくともスクリプト)を含むファイルを利用できるより効率的なソリューションを探しています。
答え1
それがすべてですcpio
。ファイルリストをコピーしてください。私はいつも「in」と「out」の方向が混乱していると思いましたが、GNUは--create
2つあります--extract
。
cd your/source/dir
cpio --create < my-files-to-copy.txt | (cd your/dest/dir && cpio --extract)
cpio
所有権/タイムスタンプの保持などの項目を管理するためのさまざまなオプションがあります。マニュアルページがあなたを案内します。理解すべき重要な点は、cpio
(a)ディレクトリをストリーム(コピーするファイルのリストなど)にコピーする場合、または(b)--make-directories
抽出側でオプションを使用しない限り、ディレクトリが作成されないことです。