我正在尝试编写一个 makefile 规则来复制目录,维护其结构,并且由于我们的 makefile 中的所有其他规则都使用install
,所以我希望保持一致。
在联机帮助页中,它说:
概要
install [OPTION]... [-T] SOURCE DEST install [OPTION]... SOURCE... DIRECTORY install [OPTION]... -t DIRECTORY SOURCE... install [OPTION]... -d DIRECTORY... -d, --directory treat all arguments as directory names; create all components of the specified directories
好吧,这听起来像是我需要的......但是这些标志没有意义。如何指定要安装的目标目录?
我尝试通过在本地硬盘上创建任意目录结构来进行基本测试:
~>tree test
test
├── a
│ └── b
│ └── c
│ └── e.txt
└── d
4 directories, 1 file
然后运行install -d
并查看创建的内容:
~>install -d test test2
~>tree test2
test2
0 directories, 0 files
什么都没发生!
有人能指出我正确的方向吗?谷歌搜索“gnu install -d flag”并没有给我带来太多。
答案1
看来这个install -D
命令确实是我想要的。
联机帮助页:
-D 创建 DEST 除最后一个之外的所有主要组件,然后将 SOURCE 复制到 DEST
效果很好,除非您必须单独指定每个文件。
答案2
install -d
仅用于创建目录。您告诉它创建两个目录,test
并且test2
.test
已经存在,所以它需要做的就是制作test2
.我不认为install
支持复制整个目录树;它通常用于文件。你可能需要使用cp
答案3
通常您想要的是将文件安装在正确的文件夹中,而不需要重复自己。您可以使用查找和安装来帮助您的安装脚本更加干燥
find SOURCE/ -type f -exec install -vDm 755 {} THERE/{} \;