1.02.2標準
/srv/app以下から、名前が*.logの通常ファイルだけを検索する。
同名のディレクトリは結果へ含めない。
適切なfindコマンドはどれか。
× 不正解
findの-type fは通常ファイル、-nameはベース名のパターン一致を指定する。パターンはシェル展開を防ぐため引用する。
詳細解説
誤り
find /srv/app -name *.log未引用の*.logはfind実行前に現在のシェルで展開され得て、通常ファイルにも限定しない。
誤り。*.logを引用しないと現在のシェルが先に展開でき、さらに-type fがないので同名ディレクトリも対象になり得る。
誤り
find /srv/app -type d -name '*.log'-type dはディレクトリだけを検索する。
誤り。名前条件は合うが-type dによってディレクトリだけを選ぶため、通常ファイルという要件と逆になる。
誤り
find /srv/app -type f -path /srv/app探索対象パスそのものとの一致を見ており、*.logという名前条件がない。
誤り。-path /srv/appはパス全体が開始点そのものかを調べ、末尾名が.logかを表さない。
正しい
find /srv/app -type f -name '*.log'通常ファイルへ限定し、find自身に*.logを評価させる。
正しい。-type fと-nameを暗黙のANDで組み合わせ、引用したglobをfind自身に評価させる。
実際に確かめる
一時的な検証環境で実行できる例です。
tmp=$(mktemp -d); touch "$tmp/a.log" "$tmp/a.txt"; mkdir "$tmp/dir.log"; find "$tmp" -type f -name '*.log' -printf '%f\n'; rm -rf "$tmp"期待される結果
a.log理解のポイント
- -type fは通常ファイル
- -nameはベース名
- globを引用
確認時の注意
- 確認環境: GNU findutils 4.x / 一時ディレクトリ
基礎のおさらい
find式
隣接するテストは通常ANDとして評価され、すべてを満たす対象だけが選ばれる。
引用の責任
findへ渡すパターンは引用し、探索前のカレントディレクトリで展開されないようにする。
問題IDKL-101-401
確認環境GNU findutils 4.x / 一時ディレクトリ
最終技術確認2026-08-13
誤り・権利侵害を報告