Help us understand the problem. What is going on with this article?

シェルスクリプトの便利なワンライナー

More than 5 years have passed since last update.

要約

端末で一行でできる便利コマンドの組み合わせたちを紹介します。
登場コマンドは 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 をつけるとディレクトリだけ表示

以前の関連する投稿

http://qiita.com/mzmttks/items/c1b1b45d98a97fcdea1e

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away