将文件及其父目录复制到目标目录

将文件及其父目录复制到目标目录

源文件 :~/SCRIPTS/script

目标目录:~/TMP/LAB

该命令应该类似于:<command> <option> ~/SCRIPTS/script ~/TMP/LAB

命令后的期望结果:~/TMP/LAB/SCRIPTS/script

这样做没有意义

<command> <option> ~/SCRIPTS/script  ~/TMP/LAB/SCRIPTS/

因为每次更改源文件时我都必须编辑命令。基本上,我希望命令根据它在源中找到的结构来创建目录,而不是根据我想要创建的目标。

该命令应该:

  1. 创建~/TMP/LAB/SCRIPTS/
  2. 将 ~/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,即使源是一个文件,也会创建父级。

相关内容