web-dev-qa-db-ja.com

cpで既存のフォルダーを上書きする

既存のフォルダをcpで上書きすることは可能ですか?例:

Tux@linux:~ $ cd /tmp/test/
Tux@linux:/tmp/test $ mkdir A
Tux@linux:/tmp/test $ cd A
Tux@linux:/tmp/test/A $ touch 1 2 3 4
Tux@linux:/tmp/test/A $ cd ..
Tux@linux:/tmp/test $ cp -R A A.bak
Tux@linux:/tmp/test $ tree
.
├── A
│   ├── 1
│   ├── 2
│   ├── 3
│   └── 4
└── A.bak
    ├── 1
    ├── 2
    ├── 3
    └── 4

2 directories, 8 files
Tux@linux:/tmp/test $ touch A/5
Tux@linux:/tmp/test $ tree
.
├── A
│   ├── 1
│   ├── 2
│   ├── 3
│   ├── 4
│   └── 5
└── A.bak
    ├── 1
    ├── 2
    ├── 3
    └── 4

2 directories, 9 files
Tux@linux:/tmp/test $ cp -R A A.bak
Tux@linux:/tmp/test $ tree
.
├── A
│   ├── 1
│   ├── 2
│   ├── 3
│   ├── 4
│   └── 5
└── A.bak
    ├── 1
    ├── 2
    ├── 3
    ├── 4
    └── A
        ├── 1
        ├── 2
        ├── 3
        ├── 4
        └── 5

3 directories, 14 files

ただし、次のようにする必要があります。

.
├── A
│   ├── 1
│   ├── 2
│   ├── 3
│   ├── 4
│   └── 5
└── A.bak
    ├── 1
    ├── 2
    ├── 3
    ├── 4
    └── 5

2 directories, 10 files
7
user179723

これはあなたが探しているものです

cp -TRv A A.bak

オプション-Tを使用すると、内容が上書きされ、宛先はディレクトリではなく通常のファイルのように扱われます。

man cpから:

-T, --no-target-directory
    treat DEST as a normal file

-v, --verbose
          explain what is being done

または、次のように、ディレクトリではなくディレクトリの内容をコピーします。

cp -TR A/* A.bak
4
Rahul