ファイルの作成と削除

ファイルの作成にはNew-Itemコマンドレットを使用する。次のように引数に作成したいファイルのパスを指定することで、サイズが0のファイルを作成することができる。

ファイルの新規作成

PS /Users/daichi/work> New-Item test.txt


    Directory: /Users/daichi/work


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
------       2018/05/22     18:57              0 test.txt


PS /Users/daichi/work>

ファイルを削除するにはRemove-Itemコマンドレットを使用する。次のように引数に削除したいファイルのパスを指定すればよい。

ファイルの削除

PS /Users/daichi/work> Remove-Item test.txt
PS /Users/daichi/work>

 

ディレクトリの作成と削除

ディレクトリの作成にもNew-Itemコマンドレットを使用する。ただし、オプションとして「-ItemType Directory」を指定する必要がある。

ディレクトリの作成

PS /Users/daichi/work> New-Item dir -ItemType Directory


    Directory: /Users/daichi/work


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2018/05/22     19:05                dir


PS /Users/daichi/work>

同様にディレクトリの削除はRemove-Itemコマンドレットを使用する。使い方は次のようにファイルの場合と同じだ。

ディレクトリの削除

PS /Users/daichi/work> Remove-Item dir
PS /Users/daichi/work>

ファイルを含んだディレクトリを削除する場合には明示的に指定を行う必要がある。まず、次のように「dir/test.txt」といったファイルを含んだディレクトリを作成する。

ファイルを含むディレクトリの作成

PS /Users/daichi/work> New-Item dir -ItemType Directory


    Directory: /Users/daichi/work


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2018/05/22     19:09                dir


PS /Users/daichi/work> New-Item dir/test.txt


    Directory: /Users/daichi/work/dir


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
------       2018/05/22     19:09              0 test.txt


PS /Users/daichi/work>

先ほどと同じ要領でディレクトリを削除しようとすると、次のようにディレクトリ以下のファイルなども削除してよいか確認を求められる。

再帰的なディレクトリの削除その1

PS /Users/daichi/work> Remove-Item dir

Confirm
The item at /Users/daichi/work/dir/ has children and the Recurse parameter was
not specified. If you continue, all children will be removed with the item. Are
 you sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):
PS /Users/daichi/work>

Remove-Itemコマンドレットには-Recurseというオプションが用意されており、ディレクトリ以下のファイルやディレクトリもまるごと削除する場合にはそのオプションを指定する。

再帰的なディレクトリの削除その2

PS /Users/daichi/work> Remove-Item dir -Recurse
PS /Users/daichi/work>

UNIX系オペレーティングシステムのrmコマンドでは、ディレクトリの削除に-rという再帰オプションを指定する必要があるが、-Recurseはそれと同じだ。

ファイルとディレクトリのコピー

ファイルのコピーには次のようにCopy-Itemコマンドレットを使う。

ファイルのコピー

PS /Users/daichi/work> New-Item test.txt


    Directory: /Users/daichi/work


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
------       2018/05/23     10:04              0 test.txt


PS /Users/daichi/work> Copy-Item test.txt test.txt.org
PS /Users/daichi/work>

ディレクトリもファイルのようにCopy-Itemコマンドレットでコピーする。

ディレクトリのコピー

 /Users/daichi/work> New-Item dir -ItemType Directory


    Directory: /Users/daichi/work


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2018/05/23     10:05                dir


PS /Users/daichi/work> Copy-Item dir dir.org

しかし、ファイルを含んだディレクトリをコピーする場合には注意が必要だ。次のようにファイルを含んだディレクトリを作成してからCopy-Itemコマンドレットでコピーを行うと、ディレクトリだけがコピーされてディレクトリ以下のファイルがコピーされていないことを確認できる。

ファイルを含むディレクトリのコピーその1

PS /Users/daichi/work> New-Item dir -ItemType Directory


    Directory: /Users/daichi/work


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2018/05/23     10:06                dir


PS /Users/daichi/work> New-Item dir/test.txt


    Directory: /Users/daichi/work/dir


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
------       2018/05/23     10:06              0 test.txt


PS /Users/daichi/work> Copy-Item dir dir.org
PS /Users/daichi/work> tree
.
├── dir
│   └── test.txt
└── dir.org

2 directories, 1 file
PS /Users/daichi/work>

上記サンプルで使っているtreeというのはコマンドレットではなくアプリケーションだ。UNIX系オペレーティングシステムで利用できるコマンドで、指定したディレクトリやカレントディレクトリをツリー状に表示してくれる。構造を把握する上で便利なコマンドなので使っている。

ディレクトリ以下のファイルも含めてコピーを行うには次のようにCopy-Itemコマンドレットに-Recurseオプションを指定する。このあたりの動作はRemove-Itemと似ている。

ファイルを含むディレクトリのコピーその2

PS /Users/daichi/work> New-Item dir -ItemType Directory


    Directory: /Users/daichi/work


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2018/05/23     10:08                dir


PS /Users/daichi/work> New-Item dir/test.txt


    Directory: /Users/daichi/work/dir


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
------       2018/05/23     10:08              0 test.txt


PS /Users/daichi/work> Copy-Item dir dir.org -Recurse
PS /Users/daichi/work> tree
.
├── dir
│   └── test.txt
└── dir.org
    └── test.txt

2 directories, 2 files
PS /Users/daichi/work>

 

ファイルとディレクトリの名前変更

ファイル名の変更にはMove-Itemコマンドレットを使用する。

ファイル名の変更

PS /Users/daichi/work> New-Item test.txt


    Directory: /Users/daichi/work


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
------       2018/05/23     10:15              0 test.txt


PS /Users/daichi/work> Move-Item test.txt test.txt.org
PS /Users/daichi/work>

ディレクトリ名の変更にもMove-Itemコマンドレットを使用する。

ディレクトリ名の変更

PS /Users/daichi/work> New-Item dir -ItemType Directory


    Directory: /Users/daichi/work


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2018/05/23     10:20                dir


PS /Users/daichi/work> New-Item dir/test.org


    Directory: /Users/daichi/work/dir


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
------       2018/05/23     10:20              0 test.org


PS /Users/daichi/work> Move-Item dir dir.org
PS /Users/daichi/work> tree
.
└── dir.org
    └── test.org

1 directory, 1 file
PS /Users/daichi/work>

Copy-Itemコマンドレットではディレクトリ以下のファイルは-Recurseオプションを指定しないとコピーされなかったが、Move-Itemではその必要はない。

ファイルとディレクトリの移動

Move-Itemコマンドレットは名前を変更するだけでなく、変更先の名前を別のパスにすればそこに移動させることができる。

ファイルを別のディレクトリへ移動

PS /Users/daichi/work> New-Item test.txt


    Directory: /Users/daichi/work


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
------       2018/05/23     10:25              0 test.txt


PS /Users/daichi/work> New-Item dir -ItemType Directory


    Directory: /Users/daichi/work


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2018/05/23     10:25                dir


PS /Users/daichi/work> Move-Item test.txt dir
PS /Users/daichi/work>

ディレクトリを別のディレクトリへ移動

PS /Users/daichi/work> New-Item dir -ItemType Directory


    Directory: /Users/daichi/work


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2018/05/23     10:34                dir


PS /Users/daichi/work> New-Item dir2 -ItemType Directory


    Directory: /Users/daichi/work


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2018/05/23     10:34                dir2


PS /Users/daichi/work> Move-Item dir dir2
PS /Users/daichi/work> tree
.
└── dir2
    └── dir

2 directories, 0 files
PS /Users/daichi/work>

覚えてしまおう

今回取りあげたNew-Item、Remove-Item、Copy-Item、Move-Itemといったコマンドレットは既存のシステムコマンドであるrm、cp、move、mkdir、touch、del、copyといったコマンドと使い方がよく似ている。ファイルを含むディレクトリの操作に関しては多少異なるが、再帰オプションを指定するところはどちらも似ている。

コマンドレット 類似アプリケーション
New-Item touch, mkdir
Remove-Item rm, del, erase
Copy-Item cp, copy
Move-Item mv, move

こうした処理は基本的なものなので、考えなくても手が動くように覚えてしまおう。

参考資料