用于将文件列表从一个项目复制到另一个项目的 Shell/terminal/bash 命令或脚本

用于将文件列表从一个项目复制到另一个项目的 Shell/terminal/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 中的现有文件/ 在那些地点。

我要复制的文件.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命令可以?

但随着文件数量的增加,这种方法的效率将会降低。我正在寻找一种更有效的解决方案,它允许我利用包含文件列表(或至少一个脚本)的文件,而不必为每个文件编写单独的命令。

答案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提取端的选项。

相关内容