公開日:2019.10.09

素敵だら! Linux コマンド ~基本編 その3~

テクログserver

こんにちはうなぎです。

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` オプションの終了を意味し、バックスラッシュはエスケープだそうです。   

参考: https://stackoverflow.com/questions/20913198/why-are-the-backslash-and-semicolon-required-with-the-find-commands-exec-optio

`;` の代わりに `+` を使用することで、コマンドに渡していた検索結果を、一つずつではなく、

まとめた形で渡すことができます。

上記の例でいえば、 `;` は

rm test1.txt
rm test2.txt
rm test3.txt

となり、`+` は

rm test1.txt test2.txt test3.txt

となります。

他にも検索するディレクトリの階層の深さを指定する `-mindepth` `-maxdepth`

特定のディレクトリ検索対象から除外する `-prune`

更新日からファイルを探す `-mtime`

など、機能がとても充実しています。

以上、細かい要望にも応えてくれる素敵な `find` コマンドでした。

この記事を書いた人

うなぎ

入社年2018年

出身地愛知県

業務内容開発

特技または趣味煮物

うなぎの記事一覧へ

テクログに関する記事一覧