GNU“安装”-d 标志——它是如何工作的?

ash*_*ies 30 coreutils

我正在尝试编写一个 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
Run Code Online (Sandbox Code Playgroud)

好的,这听起来像我需要的……但这些标志没有意义。您如何指定要安装到的目标目录?

我尝试通过在本地硬盘上创建任意目录结构来进行基本测试:

~>tree test
test
??? a
?   ??? b
?       ??? c
?           ??? e.txt
??? d

4 directories, 1 file
Run Code Online (Sandbox Code Playgroud)

然后运行install -d并查看创建的内容:

~>install -d test test2
~>tree test2
test2

0 directories, 0 files
Run Code Online (Sandbox Code Playgroud)

什么都没有发生!

任何人都可以指出我正确的方向吗?谷歌搜索“gnu install -d flag”并没有给我带来太多。

ash*_*ies 19

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

手册页:

-D 创建除最后一个之外的 DEST 的所有主要组件,然后将 SOURCE 复制到 DEST

效果很好,除非您必须单独指定每个文件。

  • 我一直兴奋到最后,“你必须单独指定每个文件”。猜猜我会坚持使用`cp -r` (9认同)
  • 安装命令是否与 `cp -r` 等效? (8认同)

Mic*_*zek 15

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

  • 基本上,`install -d` 与 `mkdir` 相同,只是你可以一次指定模式、所有者、SELinux 上下文和组。 (3认同)
  • 我会说 `install -d` 就像 `mkdir -p` (2认同)