ディレクトリ全体を移動する最も堅牢な方法は、/tmp/RtmpK4k1Ju/oldname
から/home/jeroen/newname
までです。最も簡単な方法はfile.rename
ですが、これは常に有効ではありません。たとえば、from
とto
が異なるディスクにある場合などです。その場合、ディレクトリ全体を再帰的にコピーする必要があります。ディレクトリを移動する堅牢なクロスプラットフォームの方法
これは私が思いついたものですが、少し複雑ですが、クロスプラットフォームで動作するかどうかはわかりません。より良い方法がありますか?
dir.move <- function(from, to){
stopifnot(!file.exists(to));
if(file.rename(from, to)){
return(TRUE)
}
stopifnot(dir.create(to, recursive=TRUE));
setwd(from)
if(all(file.copy(list.files(all.files=TRUE, include.dirs=TRUE), to, recursive=TRUE))){
#success!
unlink(from, recursive=TRUE);
return(TRUE)
}
#fail!
unlink(to, recursive=TRUE);
stop("Failed to move ", from, " to ", to);
}
私は完全にはわかりませんが、あなたの実際の質問は何ですか。私のコードはうまく見えますが、私たちが話しているプラットフォームを知らず、すべてのコードをテストすることなく、_cross-platform_を宣言することは決してありません。その結果をさまざまなプラットフォームでテストするようにしたいのですか?そうでなければ、あなたのコードはかなり単純明快で、あなたのことが何であるかを考慮していません。私が見る唯一の関与していないソリューションは、Carl Witthoft(彼のコメントで提案された改善を含む)によって与えられましたが、それはあなたが探しているものではないようです。 – mschilli