Command-Line
可以在一個命令中複製 relpath 嗎?
我發現自己經常這樣做,以至於我想知道是否有標準的 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")" }