ファイルとその親ディレクトリを宛先ディレクトリにコピーします。

ファイルとその親ディレクトリを宛先ディレクトリにコピーします。

ソースファイル:~/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 --parentsGNUがあればそれを使うことができます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ソースがファイルであっても親が生成されることがわかりました。

関連情報