Unixのfindコマンドからディレクトリのリストを除外する

Unixのfindコマンドからディレクトリのリストを除外する

ディレクトリ内に存在するファイルのリストを作成する必要がありますが、除外するディレクトリのリストを含むファイルも渡す必要があります。

以下の提案を見ましたが、タイプ フラグに関してはうまくいきませんでした。

find $dir_name $(printf "! -name %s " $(cat $exclude_file))

それを実行する方法はありますか、それともリスト全体を作成してから、除外ディレクトリ内のものと部分的に一致するものを削除する必要がありますか。

答え1

には名前ではなくパスが含まれているためexclude_file、そのエントリを一致させるには を使用する必要があります-path。一致するディレクトリのサブディレクトリを除外するには、それらも する必要があります-prune。これは動作するはずです:

find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -print

ファイルを表示するだけの場合は、ファイルのみを印刷できます。

find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -type f -print

関連情報