Edit

findコマンドとは

  • ファイルやディレクトリを検索する
  • パーミッション、所有者、グループ、ファイルの型、容量などで、検索することができる
  • 検索した結果を引数として別のコマンドを実行することができる

よく使うオプション

オプション 機能
-name ワイルドカード(*)を使用して、名前の一部が一致するファイル/ディレクトリを検索する
-empty 容量が0のファイル/ディレクトリを検索する
-type f ファイルのみ検索する
-type d ディレクトリのみ検索する
-exec 検索した結果を引数として別のコマンドを実行する
-anewer 指定したファイルの更新よりも後にアクセスしたファイル/ディレクトリを検索する
-newer 指定したファイルの更新よりも後に変更したファイル/ディレクトリを検索する
-and すべての条件に該当するファイル/ディレクトリを検索する
-or いずれかの条件に該当するファイル/ディレクトリを検索する
-not 指定した条件に該当しないファイル/ディレクトリを検索する
-maxdepth <num> 最大<num>の深さまで検索する
-mindepth <num> 最低<num>の深さから検索する

使用例

hogeディレクトリ内の.txt拡張子のついたファイルを検索する(-nameオプション)

hogeディレクトリ内

hoge
├── hoge.txt
└── hoge2
    └── hoge2.txt

実行するコマンド

$ find hoge -name "*.txt"

hogeディレクトリ内の.txt拡張子のついたファイルを消す(-execオプション)

実行するコマンド

$ find hoge -name "*.txt" -exec rm {} \;

※注意点 \;をつけないと-exec以降のコマンドが実行されない

シェル芸

今週はfindとgrepを使ったシェル芸を披露します

.
├── 1.txt
├── 2.txt
└── 3.md

カレントディレクトリが上記のようなファイル群を持っていて、それぞれ

ファイル 中身
1.txt hoge
2.txt foo
3.md hoge

これらのようになっているとします

ここで、拡張子がtxtで、中身にhogeという文字列を含むファイル名を知りたいとします

特定の文字列を含むファイルを探すだけならgrepコマンドだけで完結しますが、それに加えて、特定のパターンの名前を持つファイルで絞り込みをしたい場合はfindコマンドも使う必要があります

今回の場合

$ find . -name "*.txt" -exec grep -l hoge {} \;

とすると./1.txtという結果が返ってきます

クレジット

まだいない

comments powered by Disqus