LoginSignup
76
75

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 をつけるとディレクトリだけ表示

以前の関連する投稿

76
75
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
76
75