Command-Line

可以在一個命令中複製 relpath 嗎?

  • March 6, 2013

我發現自己經常這樣做,以至於我想知道是否有標準的 Unix 方法可以做到這一點:

% mkdir -p /TARGETDIR/relative/path/to
% cp ./relative/path/to/somefile /TARGETDIR/relative/path/to

換句話說,我不想只複製somefile/TARGETDIR,但實際上我想複製它的整個相對路徑

有沒有比上面的兩條線更簡單的方法來做到這一點?

使用 GNU coreutils(非嵌入式 Linux,Cygwin):

cp -p --parents path/to/somefile /TARGETDIR

使用 POSIX 工具pax(不幸的是,許多 Linux 的預設安裝都缺少該工具):

pax -rw -pp relative/path/to/somefile /TARGETDIR

與其傳統的對應物cpio

find relative/path/to/somefile | cpio -p -dm /TARGETDIR

(最後一個命令假定文件名不包含換行符;如果文件名可能被攻擊者選擇,請使用其他方法,或者find … -print0 | cpio -0 …在可用時使用。)

或者,您可以將其設為 shell 腳本或函式。

cp_relpath () {
 mkdir -p -- "$2/$(dirname -- "$1")"
 cp -Rp -- "$1" "$2/$(dirname -- "$1")"
}

引用自:https://unix.stackexchange.com/questions/66969