GNU“ install” -d标志-它如何工作?


26

我试图编写一个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标志”并没有带给我太多。

Answers:


18

看起来该install -D命令实际上是我想要的。

手册页:

-D创建除DEST之外的所有DEST领先组件,然后将SOURCE复制到DEST

效果很好,除了必须分别指定每个文件。


8
我一直很兴奋,直到最后,“您必须分别指定每个文件”。猜猜我会坚持cp -r
dtmland 2015年

7
install命令是否具有与等效的命令cp -r
亚历山大

14

install -d仅用于创建目录。您告诉它创建两个目录,testtest2test已经存在,所以要做的就是make test2。我不install支持复制整个目录树。通常用于文件。您可能需要使用cp


2
基本上,除了可以一次指定模式,所有者,SELinux上下文并进行分组之外,install -d其他方面相同mkdir
ZiggyTheHamster

0

通常,您想要的是将文件安装在正确的文件夹中,而无需重复自己的操作。您可以使用查找并安装来使安装脚本保持更干燥

find SOURCE/ -type f -exec install -vDm 755 {} THERE/{} \;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.