한 프로젝트에서 다른 프로젝트로 파일 목록을 복사하는 쉘/터미널/bash 명령 또는 스크립트

한 프로젝트에서 다른 프로젝트로 파일 목록을 복사하는 쉘/터미널/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-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-의 기존 파일/을 덮어쓰려는 파일 목록이 포함되어 있다고 가정합니다. 프로젝트/해당 위치에 있습니다.

복사하고 싶은 파일.txt
src/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두 가지 --extract.

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

cpio소유권/타임스탬프 유지와 같은 항목을 관리하기 위한 다양한 옵션이 있습니다 . 매뉴얼 페이지가 여러분을 안내할 것입니다. 이해해야 할 중요한 점은 cpio(a) 디렉터리를 스트림(예: 복사할 파일 목록)에 복사하거나 (b) --make-directories추출 측에서 옵션을 사용하지 않는 한 디렉터리가 생성되지 않는다는 것입니다.

관련 정보