ターミナルを使って、ファイルやディレクトリ操作で楽をする
Macのターミナル…いわゆる「黒い画面」。 慣れるまではなかなか手が出せませんが、実は、GUIでは手間ばかりかかってしょうがない単純作業を行うのに非常に適したスグレモノです。
しかし、かく言う自分もたまにしか使わないので、ちょっと変わったことをしようと思うと、都度都度ググっております。 そのため、使ってみて便利だったコマンドを、備忘録も兼ねてわりとシンプルな例でまとめてみました。
これを書くにあたってあちこちのサイトを参考にさせてもらってあらためて感じましたが、ただコピペするだけじゃなく、どういう意味を持ってそのコマンド、その書式になっているかを知ることが一番大事ですね。 どういうことがどんな風にできるかわかれば、「あ、これならターミナル使ったほうが早いな」と気づくこともできると思います。
ディレクトリの操作
目的のディレクトリに移動
「cd」コマンドでディレクトリを移動できますが、Macローカルの場合、日本語が混じったり階層が深かったり、意外にディレクトリ移動はしにくいものです。
が、ターミナルの場合、移動したいフォルダのアイコンをターミナルのウィンドウにドラッグすると、そこへのパスが自動で入力されます。
コマンドラインに「cd 」(最後にスペース)と打ち込んだあとにアイコンをドラッグすることで、Enterキー一つでディレクトリ移動ができます。
ディレクトリを一気に作成する
ディレクトリを一気に作成したい場合、一つ一つ「新規フォルダ」しなくても、mkdirコマンドで一気に作成できます。
スペースで区切って、作成したいディレクトリ名を列記します。
下記の例では、現在のディレクトリの中に、3つのディレクトリが一度に作成されます。
mkdir ディレクトリ名1 ディレクトリ名2 ディレクトリ名3
また、次のようにすると、現在のディレクトリの中に「ディレクトリ名1」が作成された後、その下に、{ }内のディレクトリが作成されます。
mkdir -p ディレクトリ名1/{ディレクトリ名2,ディレクトリ名3,ディレクトリ名4}
ファイルの操作
複数のディレクトリにファイルをコピー/削除する
一気にコピー
テンプレートファイルなど、ある一つのファイルを、複数のディレクトリに一気にコピーするコマンドです。
echo ディレクトリ名1 ディレクトリ名2 ディレクトリ名3 | xargs -n1 cp コピーしたいファイル
echo : 引数の文字列や変数の中身をそのまま表示
|(日本語キーボードの場合、Shift+¥) : 前のコマンドの結果を次のコマンドに渡す「パイプライン」
xargs : 渡された内容を元に、設定したコマンドを実行
cp : ファイルをコピーする
この場合、echoで渡された、スペース区切りのディレクトリ名の一覧がxargsの処理の対象になります。
xargsの後ろにある「-n1」は、作成されるコマンドの引数を1つに制限するオプションです。
ディレクトリ名一つ一つに対し、「cp コピーしたいファイル」のコマンドが実行されます。
応用で、次のようなことも可能です。
ls -F | grep / | xargs -n1 cp ../../index.html
現在のディレクトリの中にあるサブディレクトリのそれぞれに、2つ上の階層にあるindex.htmlというファイルをコピーするコマンドです。
ls -F
: lsはファイル、ディレクトリの一覧を出力するコマンド
-Fは、ファイル名ディレクトリ名だけを出力して、ディレクトリ名には/を付けてくれるオプション
grep
: 指定した文字列を含むものだけをフィルタリング
この場合は「/」を含む(ディレクトリ名)だけを次に渡す
先の例では直接コマンドラインに書いていたものを、動的に出す感じです。
一気に削除
ls -F | grep / | xargs -n1 -I% rm %index.html
現在のディレクトリのサブディレクトリそれぞれの中にあるindex.htmlを削除します。
-I%は、渡された内容(この場合はディレクトリ名それぞれ)で、後ろの実行したいコマンド中にある%を置き換えるというオプションです。
仮にディレクトリ名が「html/」だった場合、rm %index.htmlは、rm html/index.html というコマンドで実行されます。
複数のディレクトリにあるファイルを一気にリネームする
例えばCMSの場合、ダウンロードしたCMSのアーカイブの中のいろいろなディレクトリにhtaccess.txtというファイルがあり、これをインストールの際に、.htaccessにリネームしなければならないことがあります。
手動でやると意外に面倒ですが、これを一気に、作業もれなくやってしまうコマンドです。
CMSのディレクトリに移動した後に、以下のコマンドを実行します。
find . -type f -name "htaccess.txt" -execdir mv {} .htaccess \;
find . -type f -name "htaccess.txt"
: ファイルやディレクトリを検索するコマンド
「.」で検索対象をカレントディレクトリに、htaccess.txtという名前のファイルを探すという条件を設定
-execdir mv {} .htaccess \; : findコマンドの続き 見つかったhtaccess.txtファイルのあるディレクトリ内で、mvコマンドを実行。 mvコマンドに{}で結果を渡し、それを.htaccessにリネームします。mvコマンドへの引数の終わりには、「;(エスケープして \;)」を置きます。