2019.10.09
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ
こんにちはうなぎです。
IT開発者にとって避けては通れない数ある Linux コマンドのうちから、厳選してご紹介する不定期コーナー“素敵だら! Linux コマンド”。
今回も前回に引き続き「~基本編 その3~」です。
■find
私の一番好きなコマンド find。
その名前からもわかる通り、ファイルやディレクトリなどを探すコマンドです。
まずは基本的な使い方から。
今いるディレクトリの中から admin ユーザーが作成した、test_{日付}.txt ファイルってどこにあったっけ?を調べるときは
find ./ -user admin -type f -name test*.txt
のようにします。
`-name` は探す対象の名前を指定するオプションで、ワイルドカードが使用できます。
※ `-regex` を使えば正規表現も可能です
`-type` は探す対象の種類を指定します。種類は以下の通りです。
- ファイル `f`
- ディレクトリ `d`
- シンボリックリンク `l`
これだけでも結構便利なんですが、 `find` コマンドの肝はなんといっても `-exec` オプション。
これを使えば検索した結果に対して、コマンドを実行できます。
例えば先ほどの test.txt をすべて削除したいときは、
find ./ -user admin -type f -name test*.txt -exec rm {} ;
といった具合です。
この例でいうと、 `{}` に検索結果のファイルが一つずつ置き換わり、 `rm` によって削除されます。
末尾についている `;` は何かというと、セミコロンが `-exec` オプションの終了を意味し、バックスラッシュはエスケープだそうです。
`;` の代わりに `+` を使用することで、コマンドに渡していた検索結果を、一つずつではなく、
まとめた形で渡すことができます。
上記の例でいえば、 `;` は
rm test1.txt rm test2.txt rm test3.txt
となり、`+` は
rm test1.txt test2.txt test3.txt
となります。
他にも検索するディレクトリの階層の深さを指定する `-mindepth` `-maxdepth`
特定のディレクトリ検索対象から除外する `-prune`
更新日からファイルを探す `-mtime`
など、機能がとても充実しています。
以上、細かい要望にも応えてくれる素敵な `find` コマンドでした。