この質問は次のようになります。一つ最近尋ねましたが、この質問に対する答えは一般的にAFAICTとは関係ありません。これら2つの質問の主な違いは、前者はコピーに関するものであり、これは移動に関するものです。さらに、以前の質問では、相対パスを参照して不必要に具体化しました。文書。この質問で、私はあまりにも具体的なケースを削除しました。
私はこれをあまりにも頻繁に実行するので、これを行う標準のUnixメソッドがあるかどうか疑問に思います。
% mkdir -p /TARGETDIR/relative/path/to
% mv ./relative/path/to/x /TARGETDIR/relative/path/to
つまり、単に移動したくはありませんが、somefile
実際には/TARGETDIR
全体を「移動」(言えば)したいのです。相対パス。
同じ効果を得るためにシェル関数またはスクリプトを書くことができることを知っていますが、単一のコマンドを使用してこれを達成する方法がすでに存在するかどうか疑問に思います。
答え1
Rsyncは次のことができます。
rsync -R --remove-source-files a/b/c/d /TARGETDIR/
しかし、厳密に言えば、名前を変更するよりもコピーするのに近いです。
関数はとても簡単です。
mkmv() {
mkdir -p -- "$2/$(dirname -- $1)" && mv -- "$1" "$2/$1"
}
より効率的です(ただし、rsync
ファイルやディレクトリの権限やその他のプロパティをコピーするオプションはたくさんありますが)。