kjo*_*kjo 3 command-line directory cp files
我发现自己经常这样做,以至于我想知道是否有标准的 Unix 方法可以做到这一点:
% mkdir -p /TARGETDIR/relative/path/to
% cp ./relative/path/to/somefile /TARGETDIR/relative/path/to
Run Code Online (Sandbox Code Playgroud)
换句话说,我不想只是复制somefile到/TARGETDIR,但实际上我想复制其整个相对路径。
有没有比上面的两行更简单的方法来做到这一点?
使用 GNU coreutils(非嵌入式 Linux,Cygwin):
cp -p --parents path/to/somefile /TARGETDIR
Run Code Online (Sandbox Code Playgroud)
使用 POSIX 工具pax(不幸的是,许多 Linux 的默认安装都没有):
pax -rw -pp relative/path/to/somefile /TARGETDIR
Run Code Online (Sandbox Code Playgroud)
与其传统对应物cpio:
find relative/path/to/somefile | cpio -p -dm /TARGETDIR
Run Code Online (Sandbox Code Playgroud)
(这最后一条命令假定文件名不包含换行符;如果文件名可能被攻击者选择,请使用其他方法,或者使用(find … -print0 | cpio -0 …如果可用)。)
或者,您可以将其设为 shell 脚本或函数。
cp_relpath () {
mkdir -p -- "$2/$(dirname -- "$1")"
cp -Rp -- "$1" "$2/$(dirname -- "$1")"
}
Run Code Online (Sandbox Code Playgroud)