#要約
端末で一行でできる便利コマンドの組み合わせたちを紹介します。
登場コマンドは 6 つだけ: find, grep, sed, xargs, tree, watch
以下実例
[find] src/ 以下の、 .svn という名前の全ディレクトリを削除
find src -type d -name .svn -exec rm -rf {} \;
- -type d はディレクトリ だけ取り出す。 -type f なら普通のファイルだけ。
- -name .svn は完全一致。 "*" をワイルドカードに使える。
- -exec はコマンド実行。 {} がファイル名に置換される。最後に ; をつける。
[find] src/ 以下の .tex を euc に変換
find src/ -name "*.tex" -printf "nkf -e %p > tmpfile && mv tmpfile %p \n"
- -printf "..." で文字列をかける。 %p は フルパス。
nkf は --overwrite オプションで、直接変換可能。
find src/ -name "*.tex" -printf "nkf -e --overwrite %p"
nkf は iconv にしても OK。その場合は "nkf -e" --> "iconv -t euc-jp" に置換
Thanks nacht_666!
[find] src/ 以下の .txt の先頭に _ をつける
find src/ -name "*.txt" -printf "mv %p %h/_%f\n"
- -printf "..." で文字列をかける。 %f はファイルだけ。%h はディレクトリだけ。
[find + grep] src/ 以下の .cpp ファイル のうち、 search の前後 3 行を確認
find src -name "*.cpp" -exec grep -H -A 3 -B 3 search {} \;
- grep -H でファイル名もわかる。
- -A n -B m で 見つかった行の 前 n 行、 後 m 行も表示される。
[sed] subversion で 更新されたやつだけ削除
svn st | sed "s/?/rm -f/" | sh
- s/AAA/BBB/ で、 各行の AAA を BBB に置き換える。
[xargs] src/ 以下の ファイルを10 並列で削除。
find src/ | xargs -n 1 -P 10 rm -f
- -n が引数として取る個数。今回はファイル名だけなので 1
- -P が並列するプロセス数
- 最後のコマンドの後ろに、パイプで与えられた行が入って実行される。
[watch] 1秒ごとにログの最後の 10行を表示。
watch -n 1 tail -n 10 /var/log/syslog
watch の例とははずれるけども、 tail に -f をつけると同じことができる
Thanks ykubota!
[watch] 5秒ごとにコンパイル、インストール
watch -n 5 make
watch -n 5 sudo python setup.py install
[tree] src/ 以下のファイルツリーを表示
tree src/
- -d をつけるとディレクトリだけ表示
以前の関連する投稿