安装命令复制整个目录时出现问题

安装命令复制整个目录时出现问题

所以我有一个回购协议,其中包含我的一些配置文件我正在尝试创建一个makefile将它们安装在主目录中。我遇到的问题是,当我直接在 bash 中运行以下命令时

install -m 755 -d ~/path/to/dotfilesDir/ ~/

似乎什么也没发生

install -m 755 ~/path/to/dotfilesDir/{file1,file2,...} ~/

按预期工作。

为什么第一个(更简单、更干净)的解决方案不起作用?

答案1

从 @Joseph R. 的回答开始,这是我使其与 find 一起工作的解决方案,因为我无法使他的命令工作。 (我不认为是这样,因为适用于 的规则\+:元素后面不能有任何内容{}。)(我无法发表评论。实际上可以删除整个段落。)

要将所有文件复制到完全相同的目录中(此处target/directory):

find directory/to/copy -type f -exec install -Dm 755 "{}" "target/directory" \;

-D这里不是强制性的,它只会创建目标不存在的目录。

要从您当前所在的位置开始复制整个目录层次结构及其文件(这将省略空目录):

find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;

如前所述,这将从 开始重新创建树$PWD。另外,如果您需要复制空目录,可以使用-type doffind和找到一种方法install -d

因此,为了复制树,请从以下目录开始$PWD

(cd parent/directory && find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;)

注意如何parent/directory不被复制。

额外的

对于那些使用 的人shell/fish,下面的行执行相同的操作:

fish -c 'cd parent/directory; and find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \\;'

答案2

从一看手册页,似乎install不会做你想做的事。

事实上,概要部分指示了该形式的用法:

install [OPTION]... -d DIRECTORY...

后来,手册页显示:

-d, --directory
将所有参数视为目录名称;创建指定目录的所有组件

所以在我看来,这个选项的重点是能够安装一个复杂的(但空的)目录结构mkdir -p ...

您可以通过循环完成您想要的事情:

for file in /path/to/DotFiles/dir/*;do
    install -m 755 "$file" ~/
done

或者,如果 下有很多级别/path/to/DotFiles/dir,您可以使用find

find /path/to/DotFiles/dir/ -type f -exec 'install -m 755 "{}" ~/' +

答案3

将 src 文件夹及其中的文件复制到 dst 但我认为安装不支持递归文件夹复制。

install -D src/* -t dst

相关内容