with - linux cp指令




如何強制'cp'覆蓋目錄而不是在裡面創建另一個? (4)

以下命令確保副本中包含dotfiles(隱藏文件):

$ cp -Rf foo/. bar

我正在嘗試編寫一個覆蓋現有目錄的Bash腳本。 所以,我有一個目錄foo /,我試圖用它覆蓋bar /。 但是當我這樣做的時候

cp -Rf foo/ bar/

會發生什麼是創建一個新的bar / foo /目錄。 我不希望這樣。 foo / a和b中有兩個文件。 bar /中也有同名文件。 我希望foo / a和foo / b替換bar / a和bar / b。


使用此cp命令:

cp -Rf foo/* bar/

您可以使用cp -T選項執行此操作。
請參閱手冊頁以獲取cp

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

因此,根據您的示例,以下是文件結構。

$ tree test
test
|-- bar
|   |-- a
|   `-- b
`-- foo
    |-- a
    `-- b
2 directories, 4 files

當您使用-v for Verbose時,您可以看到明顯的區別。
當你只使用-R選項時。

$ cp -Rv foo/ bar/
`foo/' -> `bar/foo'
`foo/b' -> `bar/foo/b'
`foo/a' -> `bar/foo/a'
 $ tree
 |-- bar
 |   |-- a
 |   |-- b
 |   `-- foo
 |       |-- a
 |       `-- b
 `-- foo
     |-- a
     `-- b
3 directories, 6 files

當您使用選項-T它會覆蓋內容, 將目標視為普通文件而不是目錄

$ cp -TRv foo/ bar/
`foo/b' -> `bar/b'
`foo/a' -> `bar/a'

$ tree
|-- bar
|   |-- a
|   `-- b
`-- foo
    |-- a
    `-- b
2 directories, 4 files

這應該可以解決您的問題。


與@Jonathan Wheeler非常相似:

如果你不想記住,而不是重寫bar

rm -r bar/
cp -r foo/ !$

!$顯示上一個命令的最後一個參數。





cp