ディレクトリ以下の特定ディレクトリを除外しファイル列挙

特定のディレクトリを除外して、カレントディレクトリ以下のファイルを列挙する。例えば、includeを除いて、.hファイルを全部列挙。

findを使って以下のようにかける。

find . -type d -name "include" -prune -o -name "*.h" -print

列挙したファイルのファイル名とカレントディレクトリからの相対パスbasenamedirnameで得られる。

#!/bin/sh

FILEPATHS=`find . -type d -name "include" -prune -o -name "*.h" -print` 
for filepath in $FILEPATHS; do
    BASEPATH=`basename $filepath`
    DIRNAME=`dirname $filepath`
    echo $BASEPATH
    echo $DIRNAME
done

参考

findコマンドで特定のディレクトリ以下を無視する方法 - mollifier delta blog