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 -p
或tar -cf - … | tar -xf -
代替。