シェルスクリプトの覚書

Macで bash (or zsh)を使って賢く解析したい時に便利なコマンド等を書いておく.


任意の文字列(拡張子など)を持ったファイルをまとめてコピーしたい

find ./from_dir -name "tmp*.hoge" | xargs -t -I{} cp {} ./to_dir

./from_dirにあるtmp*.hogeという名前を持つファイルをto_dirにコピーする.

* はワイルドカード.


まとめてコンパイルしたい

find ./dir -name "tmp*.hoge" -type f | gawk -F/ '{print $NF}' | xargs -I {} root -l -q -b './src/program.cpp+("'{}'")'

findコマンドであるディレクトリ内のtmp*.hogeファイルを探す

garkコマンドでファイル名だけ引っ張り出す(ファイルパスごと引数にするにはこれを消す)

xargsコマンドで上記ファイル名を引数として{}に渡す

rootコマンドで実行,これはc++などでも良し.


ファイルへのアクセス権限を644(rw-r–r–)にしたいけど,ディレクトリの権限は755にしたい

find /path/to/dir -type d -exec chmod 755 {} +

find /path/to/dir -type f -exec chmod 644 {} +


cd コマンドのあれこれ

cd /path/to/dir でdirに移動

cd ~ で$HOMEに移動

cd - で直前まで作業していたディレクトリに移動


openコマンドで任意のファイルを開く(macのみ)

open -a xxx.app test.txt


改行コードを変える

tr -d "\r" <windows.txt >unix.txt

個人的にはnkfコマンドの方が使いやすい

brewで入れれる

nkf -Lu abcd.txt > abcd_crlf.txt キャストする

nkf -Lu --overwrite abcd.txt 上書きする

nkf --guess abcd.txt 文字コード確認


ファイルに実行権限を与える

chmod u+x hoge.txt


hoge.shファイルに記述した内容を反映させる

source hoge.sh


デレクトリ内のファイルの差分を見る

diff -r -u source/path dest/path

オプションってよく忘れるよね


ディレクトリごとの容量を確認する

du -h -d 1 . | sort -h -r

.でディレクトリを指定

最後にパイプ処理で容量の大きい順に並び替える