findコマンドの実用
findコマンドの基本とその実用
コマンドの基本的な文法とオプション
find /対象のディレクトリ -name キーワード
find /対象のディレクトリ -iname キーワード
(-inameは大文字小文字を区別しない)find /対象のディレクトリ -regex キーワード
(検索ファイル名に正規表現を利用する)find /対象のディレクトリ -size サイズ(ブロックサイズ)
find /対象のディレクトリ -type タイプ
タイプに以下を指定することで特定のタイプのファイルを検索できる
実用
特定の文字列が含まれるファイルおよびディレクトリを検索する
- 文法
find . -name ファイル名
処理の概要
指定したファイル名のファイルがカレントディレクトリおよびその配下に存在すればそのパスを出力する。
ファイル名には正規表現ではなくシェルで使用できるようなワイルドカードが使える。使用例
find . -name '*support*'
カレントディレクトリおよびその配下に support が含まれるディレクトリおよびファイルを検索している
findの結果を別のコマンドに渡す例
- grepに渡す
- 文法
find . -name 検索したいファイル名 | xargs grep -al 検索したい文字列
- 処理概要
findコマンドで検索した結果をさらにxargsで行単位でgrepに渡して出力を絞り込んでいる。 使用例
find ${MY_LIB} -name '*.jar' | xargs grep -al 'org/apache/.*/InvokerTransformer'
cpに渡す
- 文法1
find . -name 検索したいファイル名 | xargs cp -p --target-directory=コピー先
- 処理概要
findの結果を行単位でcpの第一引数に渡していることで、指定したコピー先にコピーしている。 - 使用例
find . -name '*showup*' | xargs cp -p --target-directory=patchinfo
- 文法2 xargsの-iオプションを使用して{}を変数としてそこに引数を渡す場合
find . -name 検索したいファイル名 | xargs -i cp -p {} /コピー先
- 使用例1
find . -name '*showup*' | xargs -i cp -p {} patchinfo
使用例2{}以外の記号を使いたい場合
find . -name '*showup*' | xargs -i% cp -p % patchinfo
rmに渡す
- 文法
find . -name 検索したいファイル名 | xargs -i rm {}
- 処理概要
findの検索結果を行単位でrmの引数として渡すことで、指定したファイルを削除する - 使用例
find . -name '*header*' | xargs -i rm {}
findの検索対象を指定する maxdepth と mindepth オプション
- maxdepth
- 使用例
find . -maxdepth 1 -name '*.log'
- 処理概要
指定したディレクトリ(この場合はカレント)の最上位1階層のみを対象にファイル名の末尾が.logのファイルを検索する - mindepth
- 使用例
find . -mindepth 1 -name '*.log'
- 処理概要 指定したディレクトリから最下位の1階層のみを対象にファイル名の末尾が.logのファイルを検索する
なお、maxdepthは指定したディレクトリを起点に何階層まで検索するかを指定しており、
mindepthは指定したディレクトリ配下の最下位のディレクトリを起点に何階層までを対象にするか指定している。