mv 是否有像 cp 一样的 --parents 选项?

mv 是否有像 cp 一样的 --parents 选项?

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

相关内容