京橋のバイオインフォマティシャンの日常

南国のビーチパラソルの下で、Rプログラムを打ってる日常を求めて、、

【Rのジミ〜な小技シリーズ】意外と分からない、ファイルを別ディレクトリに移動させる操作関数篇

過去に、R上から行う、 フォルダの基本操作(作成・削除・コピー・名前変更・移動)について 纏め記事を書いた。

skume.net

この続編的な内容で、ファイルを別ディレクトリに移動させる話となる。 Baseパッケージには適当な関数*1が用意されていないので、 便利なファイル・文字列操作ツールである、filesstringsパッケージ内の関数を使う。

このfilesstringsパッケージは、 当初、ファイルや文字列を操作するためのパッケージとしてスタートした。 その後、fsファイル操作パッケージとstrex文字列操作パッケージが出現し これらパッケージが提供していた機能も提供するようになった。 そのため、これらのパッケージはfilesstringsパッケージの機能をほとんど消滅に追いやった。 しかしながら、 このパッケージはユニークで便利なファイル操作関数というのをいくつか持っている。

今回、filesstringsパッケージのファイル操作関数を使ってみる。

とあるディレクトリとファイル構成について

まずは、例題として扱う、ディレクトリとファイル構成を概説する。

#テストディレクトリ移動
setwd("./test")

#フォルダ・ファイルの表示
list.files(recursive = F)
#[1] "test_A"     "test_B.txt" "test_C.txt" "test_D.txt"

架空のフォルダ・ファイル構成として、 testというディレクトリに入ると、そこには、 test_Aというフォルダ、またtest_B.txtなどのファイルがあるとする。

例題として、test_Aというあるフォルダに、 test_Btest_C.txtとかのファイルを移動させることをやってみる。

 

まずは、filesstringsパッケージのインストール

install.packages関数で、パッケージのインストールを行う。

#filesstringsのインストール
install.packages("filesstrings")
library(filesstrings)

ファイルを移動させる関数群

ファイルを移動させる関数*2には、move_files関数とfile.move関数がある。 以下の通り、move_filesとfile.moveは、全く同じ使い方である。

#move_filesを使う場合
filesstrings::move_files(files="test_B.txt", 
                         destinations="test_A",
                         overwrite = FALSE)
#1 files moved. 0 failed.

#file.moveを使う場合
filesstrings::file.move(files="test_C.txt", 
                        destinations="test_A",
                        overwrite = FALSE)
#1 files moved. 0 failed.

ここで、 - files: 移動するファイル/フォルダの文字ベクトル(相対パスまたは絶対パス)。 - destinations: ファイルを移動させる先のディレクトリの文字ベクトル. - overwrite: ファイルの上書きを許可するか?デフォルトは「FALSE」。 が引数として指定できる。

同時に、N個のものを移動させる場合

#両ファイルをベクトルの変数に入れる
Files <- c("test_B.txt", "test_C.txt")
#OR dir関数を使う
#Files <- dir("test_A", pattern = "txt")

#file.moveを使う場合
filesstrings::file.move(files=paste0("./test_A/", Files), 
                        destinations="../test",
                        overwrite = FALSE)
#2 files moved. 0 failed.

 

これを実行すると、元のファイル構成に戻っている。 つまりは、filesの引数に文字列ベクトルを与えることで、 複数のファイルを同時に移動させることもできる。

参考資料

github.com

*1:リネイムとかはあるが

*2:つまりは、指定したファイルを指定したディレクトリに移動する関数である。