可以用一个命令移动相对路径吗?

可以用一个命令移动相对路径吗?

这个问题类似于我最近问过,但这个问题的答案在很大程度上并不涉及 AFAICT。这两个问题的主要区别在于,前一个问题是关于复制,而这个问题是关于移动。此外,前面的问题通过引用相对路径来不必要地具体化文件。在这个问题中,我删除了这种过度具体的情况。

我发现自己经常这样做,以至于我想知道是否有标准的 Unix 方法可以做到这一点:

% mkdir -p /TARGETDIR/relative/path/to
% mv ./relative/path/to/x /TARGETDIR/relative/path/to

换句话说,我不想只是移动somefile/TARGETDIR,但实际上我想“移动”(可以这么说)它的整个相对路径

我知道我可以编写 shell 函数或脚本来达到相同的效果,但我想知道是否已经存在一种方法可以使用单个命令来实现此目的?

答案1

Rsync 可以做到这一点:

rsync -R --remove-source-files a/b/c/d /TARGETDIR/

但严格来说,它更像是复制而不是重命名。

一个函数很简单:

mkmv() {
  mkdir -p -- "$2/$(dirname -- $1)" && mv -- "$1" "$2/$1"
}

并且可能更有效(尽管rsync有更多选项允许您复制文件或目录的权限或其他属性)。

相关内容