cp
有一个有用的功能--parents
,允许将文件的目录结构复制到另一个目录:
$ cp -v --parents source/directory/from target/
‘source/directory/from’ -> ‘target/source/directory/from’
我如何同样移动一份文件?
答案1
不是直接的,至少mv
根据 GNU 的说法不是手册页。一个可能的解决方法是添加一个像这样的函数:
pmv(){
source=$1
target=${2%/}
mkdir -p -- "$target/$(dirname -- "$source")" &&
mv -- "$source" "$target/$(dirname -- "$source")/"
}
将该函数添加到 shell 的配置文件中(~/.bashrc
如果您使用的是 bash)并按如下方式运行:
pmv source/directory/from target/
答案2
有没有办法以类似的方式移动文件?
没有任何。mv
是相当简单的实用程序,它使用系统调用rename
(原子FS 操作)如果可能的话——当源/目标位于同一个块设备上时,否则它会回落到cp
行为。rename
即使您的 src/dst 是安装到 Linux 允许的不同安装点的同一设备,实际上也会失败。
因此,当您需要移动文件时,例如:
cp -v --parents source/directory/from target/
你可以想:
mv source target/
但请记住它会移动全部内容所有的父目录都可能在里面,所以你需要稍后处理这个问题 - 我的意思是,如果你需要获得与cp --parents
所提供的相同的结果,则取消所有这些额外文件的链接。
迟早你会意识到,你正在做的事情可以用cp
/rm
方法轻松完成。cp
可以使用和-l
使其快速运行,同时允许使用心爱的--parents
.这就是为什么mv
不会有像cp
's这样奇特的东西--parents
。