7. Learning the shell — Lesson 5: Manipulating Files
【所要時間】2時間4分(2018年6月29日)
【概要】
cp, mv, rm, mkdirについて学ぶ。
【要約・学んだこと】
・Graphical file managerを使ってドラッグアンドドロップなどの操作をした方が簡単だが、なぜcommand line programを使うのか。
それはパワーと柔軟性があるから。複雑なタスクはcommand line programを使った方が簡単に出来る。
・Wildcards
wildcardsと言われる文字のパターンで、file namesのグループを指定することが出来る。
色々試してみる。
Tats-MacBA-3:Demo AsamiTasuya$ ls
Sample22 directory1 file1 test.rtf
Tats-MacBA-3:Demo AsamiTasuya$ ls d*
file2
Tats-MacBA-3:Demo AsamiTasuya$ ls file?
file1
Tats-MacBA-3:Demo AsamiTasuya$ ls Sample??
Sample22
Tats-MacBA-3:Demo AsamiTasuya$ ls t*.rtf
test.rtf
Tats-MacBA-3:Demo AsamiTasuya$ ls [Sfd]*
Sample22 file1
directory1:
file2
Tats-MacBA-3:Demo AsamiTasuya$ ls [[:upper:]]*
Sample22
Tats-MacBA-3:Demo AsamiTasuya$ ls *[![:lower:]]
Sample22 file1
・cp
cpはファイルやdirectoryをコピーするコマンド
・”cp file1 file2" :
file1をfile2という名前でコピーする。file2がある場合は上書きされる。
Tats-MacBA-3:Demo AsamiTasuya$ ls
Sample22 directory1 file1 test.rtf
Tats-MacBA-3:Demo AsamiTasuya$ cp file1 file2
Tats-MacBA-3:Demo AsamiTasuya$ ls
Sample22 directory1 file1 file2 test.rtf
・”cp -i file1 file2" :
file1をfile2という名前でコピーする。file2がある場合は上書きするか聞いてくる。
Tats-MacBA-3:Demo AsamiTasuya$ ls
Sample22 directory1 file1 file2 test.rtf
Tats-MacBA-3:Demo AsamiTasuya$ cp -i file1 file2
overwrite file2? (y/n [n]) n
not overwritten
Tats-MacBA-3:Demo AsamiTasuya$ cp -i file1 file2
overwrite file2? (y/n [n]) y
基本的に”cp -i “と入力する癖をつけた方が良さそう。
・”cp file1 dir1" :
file1をdirectory dir1にコピー。
Tats-MacBA-3:directory1 AsamiTasuya$ ls
Tats-MacBA-3:directory1 AsamiTasuya$ cd ..
Tats-MacBA-3:Demo AsamiTasuya$ cp file1 directory1
Tats-MacBA-3:Demo AsamiTasuya$ cd directory1
Tats-MacBA-3:directory1 AsamiTasuya$ ls
file1
何もなかったdirectory1にfile1がコピーされた。
・”cp -R dir1 dir2" :
directory dir1の中身を、directory dir2が存在していなければ作成し、コピーする。もしすでにdirectory dir2がある場合、directory dir2の中にdirectory dir1がコピーされる。
directory1をdir1(新しい保存先)にコピーする場合
Tats-MacBA-3:Demo AsamiTasuya$ cp -R directory1 dir1
Tats-MacBA-3:Demo AsamiTasuya$ cd dir1
Tats-MacBA-3:dir1 AsamiTasuya$ ls
file1
directory1のfile1が、新規directory dir1に保存された。
続いて既存のdirectory dir2にdir1をコピーして見る。
Tats-MacBA-3:Demo AsamiTasuya$ mkdir dir2
Tats-MacBA-3:Demo AsamiTasuya$ cp -R dir1 dir2
Tats-MacBA-3:Demo AsamiTasuya$ cd dir2
Tats-MacBA-3:dir2 AsamiTasuya$ ls
dir1
directory dir2にdirectory dir1がコピーされた。
・mv
mvはファイルやdirectoryを移動したりリネームするコマンド。
・”mv file1 file2" :
file2が存在していなければ、file1がfile2という名前に変更される。もしfile2が存在している場合、file1の内容が上書き保存される。
directory Demoにあるfile2をdirectory dir1に移動。
Tats-MacBA-3:Demo AsamiTasuya$ ls
dir1 directory1 file2
dir2 file1 test.rtf
Tats-MacBA-3:Demo AsamiTasuya$ cd dir1
Tats-MacBA-3:dir1 AsamiTasuya$ ls
file1
Tats-MacBA-3:dir1 AsamiTasuya$ cd ..
Tats-MacBA-3:Demo AsamiTasuya$ mv file2 dir1
Tats-MacBA-3:Demo AsamiTasuya$ ls
dir1 dir2 directory1 file1 test.rtf
Tats-MacBA-3:Demo AsamiTasuya$ cd dir1
Tats-MacBA-3:dir1 AsamiTasuya$ ls
file1 file2
directory Demoにあったfile2はなくなり、directory dir1には新たにfile2が存在するようになった。
・”mv -i file1 file2"
上記と同様だが、file2がすでに存在している場合上書きするかどうかを確認する。
Tats-MacBA-3:dir1 AsamiTasuya$ ls
file1 file2
Tats-MacBA-3:dir1 AsamiTasuya$ cd ..
Tats-MacBA-3:Demo AsamiTasuya$ ls
dir1 dir2 directory1 file1 test.rtf
Tats-MacBA-3:Demo AsamiTasuya$ mv -i file1 dir1
overwrite dir1/file1? (y/n [n]) n
not overwritten
・”mv file1 file2 file3 dir1" :
file1, file2, file3をdirectory dir1に移動する。もしdirectory dir1がなければエラーになる。
Tats-MacBA-3:Demo AsamiTasuya$ ls
dir1 directory1 file2 test.rtf
dir2 file1 file3
Tats-MacBA-3:Demo AsamiTasuya$ mv file1 file2 file3 dir1
Tats-MacBA-3:Demo AsamiTasuya$ ls
dir1 dir2 directory1 test.rtf
Tats-MacBA-3:Demo AsamiTasuya$ cd dir1
Tats-MacBA-3:dir1 AsamiTasuya$ ls
file1 file2 file3
directory Demoにあったfile1, file2, file3がdirectory dir1に移動した。
存在しないdir3に移動しようとすると
Tats-MacBA-3:Demo AsamiTasuya$ ls
dir1 directory1 file2 test.rtf
dir2 file1 file3
Tats-MacBA-3:Demo AsamiTasuya$ mv file1 file2 file3 dir3
usage: mv [-f | -i | -n] [-v] source target
mv [-f | -i | -n] [-v] source … directory
エラーになった。
・”mv dir1 dir2" :
dir2が存在しなければdir1がdir2にリネームされる。もしdir2が存在する場合、dir1がdir2の中に移動される。
directory dir1をdirectory dir3にリネーム
Tats-MacBA-3:Demo AsamiTasuya$ ls
dir1 directory1 file2 test.rtf
dir2 file1 file3
Tats-MacBA-3:Demo AsamiTasuya$ mv dir1 dir3
Tats-MacBA-3:Demo AsamiTasuya$ ls
dir2 directory1 file2 test.rtf
dir3 file1 file3
dir1がなくなり、新たにdir3ができた。
続いてdirectory dir3をdirectory dir2の中に移動してみる。
Tats-MacBA-3:Demo AsamiTasuya$ ls
dir2 directory1 file2 test.rtf
dir3 file1 file3
Tats-MacBA-3:Demo AsamiTasuya$ cd dir2
Tats-MacBA-3:dir2 AsamiTasuya$ ls
dir1
Tats-MacBA-3:dir2 AsamiTasuya$ cd ..
Tats-MacBA-3:Demo AsamiTasuya$ mv dir3 dir2
Tats-MacBA-3:Demo AsamiTasuya$ ls
dir2 file1 file3
directory1 file2 test.rtf
Tats-MacBA-3:Demo AsamiTasuya$ cd dir2
Tats-MacBA-3:dir2 AsamiTasuya$ ls
dir1 dir3
directory dir2の中にはdir1しか存在していなかったが、移動後directory dir3も存在していることがわかる。
・rm
rmはファイルやdirectoryを削除するときに使用するコマンド。
・rm file1 file2 :
file1とfile2を削除。
Tats-MacBA-3:Demo AsamiTasuya$ ls
dir2 file1 file3
directory1 file2 test.rtf
Tats-MacBA-3:Demo AsamiTasuya$ rm file1 file2
Tats-MacBA-3:Demo AsamiTasuya$ ls
dir2 directory1 file3 test.rtf
削除された。
・”rm -i file1 file2" :
上記のコマンドと同様だが、削除前に確認される。
Tats-MacBA-3:Demo AsamiTasuya$ ls
dir2 directory1 file3 test.rtf
Tats-MacBA-3:Demo AsamiTasuya$ rm -i file3 test.rtf
remove file3? n
remove test.rtf? n
Tats-MacBA-3:Demo AsamiTasuya$ ls
dir2 directory1 file3 test.rtf
確認された。
・”rm -r dir1 dir2" :
directory dir1とdir2、その中身全てを削除。
Tats-MacBA-3:Demo AsamiTasuya$ ls
dir2 directory1 file3 test.rtf
Tats-MacBA-3:Demo AsamiTasuya$ rm -r dir2 directory1
Tats-MacBA-3:Demo AsamiTasuya$ ls
file3 test.rtf
削除された。
・Be careful with rm!
一度rmコマンドで消去すると復元不可能。深刻なダメージをコンピュータに与えることがあるので注意。特にwildcardsを使用しているときは注意が必要。
ファイルを消す前に”ls”コマンドで影響を考えると良い。その後上キーで先ほどのコマンドをリコールし、”ls”の部分を”rm”に変えると良い。
・mkdir
mkdirはdirectoryを作る際に使用するコマンド。
・Using Commands With Wildcards
・”cp *.txt text_files” :
現在のdirectoryの全ての”.txt”で終わるファイルが、”text_files”という名前でコピーされる
ats-MacBA-3:Demo AsamiTasuya$ ls
file3 teset test.rtf test1.txt test2.txt
Tats-MacBA-3:Demo AsamiTasuya$ cp *.text text_files
cp: *.text: No such file or directory
Tats-MacBA-3:Demo AsamiTasuya$ cp *.txt text_files
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file … target_directory
Tats-MacBA-3:Demo AsamiTasuya$ cp *.rtf text_files
Tats-MacBA-3:Demo AsamiTasuya$ ls
file3 test.rtf test2.txt
teset test1.txt text_files
.txtで終わるファイルが2つあったがエラーになった。
.rtfで終わるファイルは1つなのでやってみるとできた。
【わからなかったこと】
【感想】
・cp, mv, rmいずれの場合も、基本的に”-i”をつけて入力した方が良さそう。