这个问题类似于一我最近问过,但这个问题的答案在很大程度上并不涉及 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
有更多选项允许您复制文件或目录的权限或其他属性)。