Comando shell / terminal / bash ou script para copiar a lista de arquivos de um projeto para outro

0

Digamos que eu tenha um projeto chamado my-project / que resida em seu próprio diretório e tenha a seguinte estrutura de arquivos.

meu projeto/
.
├── src
│   ├── index.html
│   ├── main.js
│   ├── normalize.js
│   ├── routes
│   │   ├── index.js
│   │   └── Home
│   │       ├── index.js
│   │       └── assets
│   ├── static
│   ├── store
│   │   ├── createStore.js
│   │   └── reducers.js
│   └── styles
└── project.config.js

Agora, digamos que eu tenha um novo projeto chamado my-new-project que também resida em seu próprio diretório e tenha a mesma estrutura de arquivos do meu-projeto, mas contenha um arquivo adicional chamado my-files-to-copy.txt

meu-novo-projeto /
.
├── 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 / tem a mesma estrutura de arquivo, mas conteúdo de arquivo diferente do meu-projeto /

Agora vamos dizer que meu-arquivos-para-copy.txt contém uma lista de arquivos que eu quero copiar do meu-projeto / e escrever no mesmo caminho em meu-novo-projeto / para sobrescrever os arquivos existentes no meu- novo projeto / nesses locais.

my-files-to-copy.txt
src/main.js
src/routes/index.js
src/store/reducers.js
project.config.js

Como posso fazer isso com um comando / script terminal / bash / shell?

Acho que posso fazer:

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

Talvez algum tipo de comando rsync funcione?

Mas à medida que o número de arquivos é dimensionado, esse método se tornará menos eficiente. Eu estava procurando por uma solução mais eficiente que me permitisse alavancar o arquivo que contém a lista de arquivos (ou pelo menos um script) sem ter que escrever um comando separado para cada um.

    
por Mowzer 11.11.2018 / 02:48

1 resposta

1

É para isso que o cpio : copia uma lista de arquivos. Eu sempre acho as direções "in" e "out confusas e estou feliz que a GNU tenha --create e --extract .

 cd your/source/dir
 cpio --create < my-files-to-copy.txt | (cd your/dest/dir && cpio --extract)

Existem muitas opções para cpio governar coisas como preservar propriedade / timestamps. A página do manual irá guiá-lo. Uma grande pegadinha a ser conhecida é que cpio não criará diretórios, a menos que você (a) copie-os para o fluxo (por exemplo, na lista de arquivos a serem copiados) ou (b) use a opção --make-directories no lado do extrato. / p>     

por 11.11.2018 / 04:33