前回記事「Windows・Mac・Linuxで現在地・ファイル一覧・移動を確認する|コマンドライン入門①」では、
Windows PowerShell / macOS / Linuxで、
- 今いる場所を確認する
- ファイル一覧を見る
- ディレクトリを移動する
という基本操作を比較しました。
今回はその次に使う、
作成 → コピー → 移動 → 削除
を3OSで整理します。
コマンド一覧を暗記するのではなく、
このファイルを複製したい
別フォルダへ移したい
不要なファイルを削除したい
というやりたいことを基準に比較します。
まず全体像です。
| やりたいこと | Windows PowerShell | macOS / Linux |
|---|---|---|
| ファイル作成 | New-Item -ItemType File |
touch |
| フォルダ作成 | New-Item -ItemType Directory |
mkdir |
| コピー | Copy-Item |
cp |
| 移動 | Move-Item |
mv |
| 名前変更 |
Rename-Item / Move-Item
|
mv |
| ファイル削除 | Remove-Item |
rm |
| フォルダ削除 | Remove-Item -Recurse |
rm -r |
1. ファイルを作りたい
Windows PowerShell
PowerShellでは New-Item を使います。
New-Item -Path ./memo.txt -ItemType File
New-Item は、ファイルだけでなくディレクトリなども作成できるコマンドレットです。
PowerShellらしく、
New
+
Item
で「新しい項目を作る」と読めます。
macOS / Linux
touch ./memo.txt
です。
touch は本来ファイルのタイムスタンプを更新するコマンドですが、指定したファイルが存在しない場合は空ファイルが作成されるため、簡単なファイル作成にもよく使われます。
2. フォルダを作りたい
Windows PowerShell
New-Item -Path ./practice -ItemType Directory
です。
PowerShellでは同じ New-Item でも、
-ItemType File
-ItemType Directory
で作る種類を変えられます。
macOS / Linux
mkdir ./practice
です。
こちらは、
make directory
の略です。
Windows PowerShellでも mkdir という入力は利用できますが、PowerShellの基本を理解する記事では New-Item を正式形として覚えておく方が、後の操作との統一感があります。
3. ファイルをコピーしたい
例えば、
memo.txt
を、
backup/memo.txt
へコピーします。
Windows PowerShell
Copy-Item ./memo.txt ./backup/memo.txt
macOS / Linux
cp ./memo.txt ./backup/memo.txt
結果として、
元:memo.txt
コピー先:backup/memo.txt
の両方が残ります。
つまりコピーは、
元を残して複製する
操作です。
PowerShellでも cp は使える
Windows上のPowerShellでは、
cp ./memo.txt ./backup/memo.txt
も使えます。
Microsoft公式では、Windows PowerShellの互換エイリアスとして、
cp → Copy-Item
が用意されています。Microsoft Learn
実際に現在の環境で確認するなら、
Get-Alias cp
です。
ただし重要なのは、
PowerShellの cp とUnixの cp は、文字列が同じでも同じプログラムではない
ことです。
Windows PowerShellでは Copy-Item のエイリアスです。
4. フォルダをコピーしたい
ディレクトリ内部までコピーする場合です。
Windows PowerShell
Copy-Item ./project ./backup/ -Recurse
macOS / Linux
cp -r ./project ./backup/
両方とも、配下のファイルやフォルダを含めて再帰的にコピーします。
対応関係としては、
PowerShell
-Recurse
Unix系
-r
です。
5. 別フォルダへ移動したい
Windows PowerShell
Move-Item ./memo.txt ./backup/
macOS / Linux
mv ./memo.txt ./backup/
コピーとの違いは明確です。
コピー
元にも残る
+
コピー先にもある
移動
元からなくなる
↓
移動先へ移る
PowerShellでも mv が使える
Windows PowerShellでは、
mv ./memo.txt ./backup/
も使えます。
これは、
mv → Move-Item
という互換エイリアスです。Microsoft Learn
確認するなら、
Get-Alias mv
です。
6. 名前を変えたい
移動と名前変更は関係が深い操作です。
Windows PowerShell
意味が明確なのは、
Rename-Item ./memo.txt memo-old.txt
です。
Move-Item でも、
Move-Item ./memo.txt ./memo-old.txt
とできます。
macOS / Linux
mv ./memo.txt ./memo-old.txt
です。
Unix系では mv が、
- 場所の移動
- 名前変更
の両方に使われます。
「同じ場所の中で、新しい名前の場所へ移す」と考えると理解しやすいです。
7. 第1回の相対パスを使ってみる
前回扱った、
.
..
も今回の操作で使えます。
例えば現在地が、
project/src
だとします。
1つ上の backup へコピーするなら、
PowerShell
Copy-Item ./memo.txt ../backup/
macOS / Linux
cp ./memo.txt ../backup/
です。
ここで、
.
→ 現在地
..
→ 1つ上
です。
第1回の「移動」が、今回のファイル操作にもそのままつながります。
8. ファイルを削除したい
削除は、今回の中で最も慎重に扱いたい操作です。
Windows PowerShell
Remove-Item ./memo.txt
macOS / Linux
rm ./memo.txt
です。
GUIで「ゴミ箱へ移す」操作と同じとは限りません。
コマンドラインからの削除では、そのままファイルが失われる可能性があります。
PowerShellでも rm が使える
Windows PowerShellでは、
rm ./memo.txt
も使用できます。
これは、
rm → Remove-Item
というエイリアスです。Microsoft Learn
確認するなら、
Get-Alias rm
です。
そのためWindows PowerShell上で、
cp
mv
rm
を見るとUnixと同じように見えます。
しかし実際には、
cp → Copy-Item
mv → Move-Item
rm → Remove-Item
を呼んでいる点を意識しておいた方がよいです。
9. 削除前にまず対象を見る
例えば .txt ファイルを削除したいとします。
いきなり、
rm *.txt
とする前に、
ls *.txt
で確認する。
PowerShellなら、
Get-ChildItem *.txt
で確認する。
そのあと必要なら、
Remove-Item *.txt
とします。
つまり、
対象を表示
↓
内容を確認
↓
削除
です。
10. ワイルドカード *
*.txt
は、
.txtで終わるもの
をまとめて指定します。
例えばPowerShellでは、
Get-ChildItem *.txt
macOS / Linuxでは、
ls *.txt
です。
コピーや削除などにも使えます。
ただし、
ワイルドカード + 削除
は対象範囲が広くなりやすいため、先に一覧確認する癖を付けた方が安全です。
11. フォルダを削除したい
空でないディレクトリを含めて削除する場合です。
PowerShell
Remove-Item ./practice -Recurse
macOS / Linux
rm -r ./practice
です。
どちらもディレクトリ配下へ処理範囲を広げます。
12. rm -rf を初心者向け便利コマンドとして覚えない
ネット上の手順では、
rm -rf directory
をよく見ます。
意味は大まかに、
-
-r:ディレクトリ以下を再帰的に処理 -
-f:確認等を抑えて強制的に処理
です。
強力ですが、その分パスを間違えたときの影響も大きくなります。
初心者のうちは、
pwd
ls
で、
- 今どこにいるか
- 本当にその対象でよいか
を確認してから削除する方が安全です。
PowerShellの、
Remove-Item -Recurse
についても同じ考え方です。
13. Windows PowerShellとUnix系の共通点・違い
ここまでを並べると、特徴が見えてきます。
PowerShell
New-Item
Copy-Item
Move-Item
Remove-Item
macOS / Linux
touch
cp
mv
rm
PowerShellでは、動詞と名詞から役割を読み取りやすくなっています。
Unix系は短いコマンドが中心です。
ただしWindows PowerShellにはUnixユーザー向けの互換エイリアスもあり、
cp
mv
rm
ls
pwd
なども使えます。Microsoft Learn
14. エイリアスを使えば全部同じ、ではない
ここは第1回の読者コメントともつながります。
Windows PowerShellで、
cp
mv
rm
が使えるからといって、
PowerShellとbash/zshは同じ
ではありません。
Microsoft公式も、一部のUnix互換エイリアスはWindows固有で、PowerShellをmacOS/Linux上で実行するとネイティブコマンドを優先するため存在しないものがあると説明しています。Microsoft Learn
また、PowerShellスクリプトではエイリアスより正式なコマンドレット名を使った方が意図が明確になります。
つまり、
対話操作
→ cp / mv / rm でも便利
手順書・スクリプト
→ Copy-Item / Move-Item / Remove-Item の方が明確
という使い分けができます。
15. Git Bashの場合はまた別
WindowsでGit for Windowsを導入していると、Git Bashを使うことがあります。
その場合はPowerShellではなく、Unix系に近いshell環境なので、
touch
cp
mv
rm
ls
といった操作感になります。
つまりWindows PCでも、
PowerShell
Git Bash
WSL
のどれを使っているかで、同じ文字列でも環境は異なります。
「Windowsだからこのコマンド」とだけ考えず、
今どのshellを使っているか
も意識すると混乱しにくくなります。
16. 一連で試す
練習用ディレクトリで、
- ファイルを作る
- コピーする
- 名前を変える
- 削除する
をやってみます。
PowerShell
New-Item ./practice -ItemType Directory
Set-Location ./practice
New-Item ./memo.txt -ItemType File
Copy-Item ./memo.txt ./memo-copy.txt
Move-Item ./memo-copy.txt ./memo-backup.txt
Get-ChildItem
Remove-Item ./memo-backup.txt
macOS / Linux
mkdir ./practice
cd ./practice
touch ./memo.txt
cp ./memo.txt ./memo-copy.txt
mv ./memo-copy.txt ./memo-backup.txt
ls
rm ./memo-backup.txt
コマンド名は違います。
でも、
作る
↓
コピー
↓
名前変更
↓
確認
↓
削除
という作業そのものは同じです。
まとめ
目的ごとに並べると、
| 目的 | PowerShell | macOS / Linux |
|---|---|---|
| ファイル作成 | New-Item |
touch |
| フォルダ作成 | New-Item |
mkdir |
| コピー | Copy-Item |
cp |
| 移動 | Move-Item |
mv |
| 名前変更 | Rename-Item |
mv |
| 削除 | Remove-Item |
rm |
今回一番大事なのは、削除コマンドを覚えることより、
現在地と対象を確認してから操作する
ことです。
第1回で扱った、
現在地
↓
一覧
↓
移動
が、今回のファイル操作にもそのままつながります。
次回は、
「このPCで今、何が動いているか」
を見るために、
Get-ProcessGet-Servicepstopsystemctl
を3OSで比較します。