この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
こんにちは、新卒のプログラマーです。
初歩的な話ではありますが、findコマンドを利用することで簡単にファイルやディレクトリ、ソースコードを検索出来るようになったので備忘録も兼ねて共有したいと思います。
findコマンド
findコマンドは、findは、ファイルやディレクトリを検索するコマンドです。
ファイル名だけでなく、ファイルサイズやタイムスタンプなどでも検索をすることが可能です。
findの記法は、以下のようになっています。
find [検索開始ディレクトリ] [オプション] [検索したいファイル名]
オプションや開始ディレクトリを省略すると、カレントディレクトリを検索します。
$ find sample1.rb
find: 'sample1.rb' そのようなファイルやディレクトリはありません
$ find hogehoge/sample1.rb
hogehoge/sample1.rb
オプションの利用
findコマンドには、多くのオプションがありますが、自分はよくnameオプションを利用しています。
ワイルドカードを利用できるので、ファイル名が正確に分かっていなくても検索をすることが可能です。
$ find ./hogehoge/ -name "*"
./hogehoge/
./hogehoge/sample2.rb
./hogehoge/sample3.rb
./hogehoge/sample1.rb
また、typeオプションを利用することで、検索対象をファイルかディレクトリか指定することが出来ます。
find -type f: ファイルを検索
find -type d: ディレクトリを検索
$ find ./hogehoge/ -name "*" -type f
./hogehoge/sample2.rb
./hogehoge/sample3.rb
./hogehoge/sample1.rb
$ find ./hogehoge/ -name "*" -type d
./hogehoge/
その他にも多くのオプションがあるので、findのマニュアルをご覧ください。
xargs,grepコマンドとの組み合わせ
findコマンドは他のコマンドと組み合わせることで、より便利に扱うことが出来ます。
自分はプログラムコードを検索する時などに、よくxargsとgrepコマンドを組み合わせて利用しています。
xargsコマンドは、ファイル名の一覧を標準入力として受け取って任意のコマンドに引数として渡すコマンドです。
また、grepコマンドは、ファイル名を与えることでファイル内を指定文字列で検索するコマンドです。
そのため、findで得られたファイル名のリストをgrepに渡すようにコマンドを書いてあげると、ファイル内の記述も簡単に検索することが出来るようになります。
$ find ./hogehoge/ -name "*" -type f | xargs grep "Hello"
./hogehoge/sample1.rb:print "Hello, World!\n"
終わりに
初歩的な話ではありますが、findコマンドについて普段自分が利用している方法をまとめました。
まだまだ有効活用できていないコマンドやオプションも多いので、日々精進していきたいと思います。