ファイルの作成と削除
ファイルの作成には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 |
こうした処理は基本的なものなので、考えなくても手が動くように覚えてしまおう。
参考資料
- Microsoft PowerShell Module Browser
- Microsoft PowerShell6|Microsoft.PowerShell.Management|New-Item
- Microsoft PowerShell6|Microsoft.PowerShell.Management|Remove-Item
- Microsoft PowerShell6|Microsoft.PowerShell.Management|Copy-Item
- Microsoft PowerShell6|Microsoft.PowerShell.Management|Move-Item
- The Tree Command for Linux Homepage