【Linux】ファイル検索のあれこれ【ls/find/grep/xargs】

【Linux】ファイル検索のあれこれ【ls/find/grep/xargs】

はじめに

コジマです。

Linuxでファイル探すときに効率よくファイル探したいですよね。

よく使うんですけど、忘れがちですよね。

  • 探したいディレクトリは分かっている
  • 探したいファイル名だけは分かっている
  • 探したいファイル名の一部は分かっている
  • ディレクトリは分かる。ファイル名覚えてないけど、何が書いてあるのか少しわかる

に分けて紹介しようと思います。

前提

試験環境はCentOS7です。RedHat,Debian,Ubuntuでもできると思います。

hoge_fuga.txtというファイルをホームディレクトリ(~/)に用意しました。
中身はこんな感じです。

ifconfigの実行結果を書き込みました。

探したいディレクトリは分かっている

探したいフォルダは分かっているならまずそのフォルダに移動します。

mv ~

そしたらlsします。

ls -l
-lオプションをつけるとリスト表示して見やすくなるのでお勧めです。

実行結果はこんな感じ

ファイル名もわかる場合はgrepをつけましょう。

ls -l | grep hoge_fuga

より探しやすくなります。

探したいファイル名だけは分かっている

まず、どのディレクトリより下にあるのは確実か思い出してください。
分からなければルート直下からfindします。(荒っぽいけどね。。)

ここでは本当にどこにあるか分からなくなってルート直下からfindすることになったとします。
以下のコマンドを入力します。

find / -name hoge_fuga.txt

正式なファイル名が分かる場合は-nameオプションとファイル名を入れることで検索可能です。
このように探すことができます。

探したいファイル名の一部は分かっている

この場合はfindとgrepを使ってあげます。

find / | grep hoge

ディレクトリは分かる。ファイル名覚えてないけど、何が書いてあるのか少しわかる

これが一番鬼門ですね。

この例ではifconfigの結果を書き込んだという物だと分かっています。
「inet」というワードで上手く引っ張り出したいです。

ホームディレクトリにあるのは分かっています。

こちらはこれを参考にしています。
http://kawatama.net/web/1141

find ./ -print | xargs grep ‘inet’

実行結果はこんな感じ。

xargsは標準入力からコマンドラインを作成して実行します。
このようにパイプを使うことでパイプ前のコマンドの実行結果を引数に取ってgrepを実行します。

つまりは

grep ‘inet’ ./hoge_fuga.txt

が二回目に実行されることになります。

さいごに

ファイル検索はよくしますし、紹介した参考リンクはよく見ていましたので、
ファイルを探すノウハウとしてひとまとめにしておこうと思い書きました。

コマンドまとめておくので、Linux使う方はコピーしてメモ帳にぺとっと貼っておくと
便利かと思います。

この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!

以上、コジマでした。


小ネタカテゴリの最新記事