[Linux] 命令行文件夹跨目录的复制(移动)
命令行中使用cp/mv/rsync跨目录复制或移动目录时, 会碰到要把a放到b下, 结果跑了到了b/a/a, 或者a没过去, a/*跑到了b下, 就总结了一下目录复制(移动)时怎么确保文件不会跑错地方:
cp
跨目录cp目录时, 目标路径是否存在决定操作后的目录结构(层级):
源路径和目标路径后加不加/
, 两边文件夹同是否同名, 都不产生影响
目标路径存在时:
`cp -r a b/a` -> `b/a/a`
`cp -r a b/c` -> `b/c/a`
目标路径不存在时:
`cp -r a b/a` -> `b/a`
`cp -r a b/c` -> `b/c`
也可以使用-T
将目标路径视为普通文件:
`cp -frT a b/a; cp -frT a b/a` -> `b/a`
`cp -frT a b/c; cp -frT a b/c` -> `b/c`
mv
跨目录mv目录时, 同cp目录, 目标路径是否存在决定操作后的目录结构(层级):
源路径和目标路径后加不加/
, 两边文件夹是否同名, 都不产生影响
目标路径存在时:
`mv a b/a` -> `b/a/a`
`mv a b/c` -> `b/c/a`
目标路径不存在时:
`mv a b/a` -> `b/a`
`mv a b/c` -> `b/c`
也可以使用-T
将目标路径视为普通文件:
`mkdir -p b/a; mv -T a b/a` -> `b/a`
`mkdir -p b/c; mv -T a b/c` -> `b/c`
rsync
rsync同步目录时, 源路径后加不加/
决定操作后的目录结构(层级):
无论目标路径存不存在, 目标路径后加不加/
, 两边同是否同名, 都不产生影响
源路径后不加/
时:
`rsync -a a b/a` -> `b/a/a`
`rsync -a a b/c` -> `b/c/a`
源路径后加/
时:
`rsync -a a/ b/a` -> `b/a`
`rsync -a a/ b/c` -> `b/c`
也是说源是目录时后面加/
类似cp
/mv
命令操作目录时加的-T
参数