源文件 :~/SCRIPTS/script
目标目录:~/TMP/LAB
该命令应该类似于:<command> <option> ~/SCRIPTS/script ~/TMP/LAB
命令后的期望结果:~/TMP/LAB/SCRIPTS/script
这样做没有意义
<command> <option> ~/SCRIPTS/script ~/TMP/LAB/SCRIPTS/
因为每次更改源文件时我都必须编辑命令。基本上,我希望命令根据它在源中找到的结构来创建目录,而不是根据我想要创建的目标。
该命令应该:
- 创建~/TMP/LAB/SCRIPTS/
- 将 ~/SCRIPTS/script 复制到其中。
cp --parents
这样做,但仅在复制目录时
不知道install
能不能帮我做一下?或者可能rsync
?
答案1
cp --parents
如果您有 GNU ,您应该能够使用cp
。
bash-5.1$ tree
.
|-- SCRIPTS
| |-- otherfile
| `-- script
`-- TMP
`-- LAB
3 directories, 2 files
bash-5.1$ cp --parents SCRIPTS/script TMP/LAB/
bash-5.1$ tree
.
|-- SCRIPTS
| |-- otherfile
| `-- script
`-- TMP
`-- LAB
`-- SCRIPTS
`-- script
4 directories, 3 files
您建议使用,如果您使用其( ) 选项,rsync
则可以这样做:-R
--relative
bash-5.1$ rm -r TMP/LAB/SCRIPTS/
bash-5.1$ rsync -R SCRIPTS/script TMP/LAB/
bash-5.1$ tree
.
|-- SCRIPTS
| |-- otherfile
| `-- script
`-- TMP
`-- LAB
`-- SCRIPTS
`-- script
4 directories, 3 files
请注意,在这两种变体中,使用绝对路径~/SCRIPTS/script
作为源而不是相对路径SCRIPTS/script
将创建与目标处的绝对路径相对应的目录,并且最终会得到类似TMP/LAB/home/myself/SCRIPTS/script
.
您可以通过首先将目录更改为包含该目录的目录来避免这种情况SCRIPTS
。
答案2
事实证明cp --parents
,即使源是一个文件,也会创建父级。