如何在複製檔案的同時建立目標目錄?

如何在複製檔案的同時建立目標目錄?

cp aaa/deep/sea/blob.psd我想要bbb/deep/sea/blob.psd

deep如果和sea目錄不存在,如何進行複製bbb,以便複製既建立所需的目錄並複製檔案?

現在我已經
No such file or directory很深了,海並不存在。

我瀏覽了幫助頁面和其他問題,但什麼也沒引起我的注意。

我得到的最接近的是rcp用於目錄:

rcp -r aaa/deep/sea/ bbb/deep/sea/

雖然這會複製整個目錄和內容,但我只想要一個檔案。然而嘗試這樣做卻給了cp: cannot create regular file bbb/deep/sea/blob.psd' such file or directory

答案1

install使用該程式很容易核心工具通常由諸如此類的構建系統用於此目的汽車製造商

install -D /path/to/source /path/to/destination

請注意install創建全部路徑的一部分就像mkdir -p一樣,請參閱man install。我很好奇你為什麼不包括為什麼你想這麼做。打電話mkdir非常cp方便。

答案2

嘗試在這種情況下使用這樣的下一個函數:

copy_wdir() { mkdir -p -- "$(dirname -- "$2")" && cp -- "$1" "$2" ; }

並將其用作

copy_wdir aaa/deep/sea/blob.psd bbb/deep/sea/blob.psd

順便說一句,GNUcp有一個--parents選項。它確實很接近您想要的,但並不完全一樣。
它還會創建aaa您似乎不需要的目錄。但是,您可以先 cdaaa並複製如下:

cd aaa && cp --parents deep/sea/blob.psd ../bbb/

答案3

使用標準 (POSIX/Unix) 命令,您可以獲得:

pax -rws ':^:dest/dir/:' file .

答案4

cd aaa
pax -rw deep/sea/blob.psd ../bbb

如果您沒有pax(這是 POSIX 強制要求的,作為 cpio 和 tar 的標準替代品,因為它們有太多不相容性而無法標準化),請使用cpio -ptar -cf - … | tar -xf -代替。

相關內容