find コマンド メモ †名の通りいろいろ探せる. ファイル検索 †find . -name "*.f90" で階層下(.)のファイル名が一致するやつ(上記ならf90形式ファイル)を検出し,リストアップする. find . -name "*.f90" | sort -d 見つかった個数を表示したいときは wc でカウントする. find . -name "*.f90" | wc -l 階層の深さを指定したい時は maxdepth を使う. find . -maxdepth 3 -name "*.f90" さらに,キーワードを複数指定したいときは find . -type f \( -iname "*.f90" -o -iname "*.F" \) キーワードを指定しつつ,特定の文字列 '.git' をもつファイル名を除外したいときは find . ! -path "*.git*" -type f \( -iname "*.f90" -o -iname "*.F" \)
ディレクトリ検索 †ディレクトリ名を検出するには,パイプで渡してgrepを使うとできる find . -type d | grep dirname 奥の階層までディレクトリ検索する必要がない時は,maxdepth オプションを使う. # -maxdepth 1 はディレクトリの中のディレクトリを検索しない find . -maxdepth 1 -type d | grep dirname maxdepth はオプションの位置が重要で,上のような位置で指定しないと正しく動作しないので注意. 検索されたファイルやディレクトリへの一括処理 †検出結果全てに対して,cp や rm や ln などのコマンドを実行したいときは,-exec というオプションを使うと便利. find . -name "hogehoge*" -type d -exec ln -s ../file.sh {}/file.sh \; find の -exec オプションは ; と {} が何なのか覚えておくことが大変なので,| で繋いで xargs を使う方がかわりやすくて良いかも. ライブラリ等のファイルを検索 †ライブラリのファイルのありかを知りたいときは, find コマンドより locate コマンドの方が良い. |