![将一个文件夹的内容安装到另一个文件夹中](https://linux22.com/image/90395/%E5%B0%86%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9%E7%9A%84%E5%86%85%E5%AE%B9%E5%AE%89%E8%A3%85%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD.png)
我正在尝试编写一个 Makefile 将文件夹的内容安装到系统上的另一个文件夹中。
我想保持相同的目录结构,就像这样。
localfolder
├── a
└── b
├── c
└── d
├── e
└── f
我尝试了不同的选项,但没有任何作用
$ install -d localfolder /opt/folder
(does nothing)
$ install -t localfolder /opt/folder
install: omitting directory '/opt/folder'
$ install -D localfolder /opt/folder
install: omitting directory 'localfolder'
有人能指出我正确的方向吗?谷歌搜索“linux install command”没有带来任何相关信息。
谢谢!
答案1
对于那些想要解决方案的人,这里是:安装命令不能递归运行。所以我写了一个 shell 脚本来实现这个目的。
第一个参数是要复制的文件夹,第二个参数是目标目录
#!/bin/sh
# Program to use the command install recursivly in a folder
magic_func() {
echo "entering ${1}"
echo "target $2"
for file in $1; do
if [ -f "$file" ]; then
echo "file : $file"
echo "installing into $2/$file"
install -D $file $2/$file
elif [ -d "$file" ]; then
echo "directory : $file"
magic_func "$file/*" "$2"
else
echo "not recognized : $file"
fi
done
}
magic_func "$1" "$2"
它也可以作为要点这里
答案2
来源文件列表的一侧install
(根据info
)。所以,使用
install source/* /destination
-d
和-D
选项在目标中创建丢失的目录(有差异),
-t
选项意味着目的地是目录。
使用目录选项,它会复制每个源文件进入目标文件夹带有源文件名