複数のアップデートを配信する方法! -検索するパスパラメータ

複数のアップデートを配信する方法! -検索するパスパラメータ

findを使用して検索するときに無視したいディレクトリ/ファイルのリストを含むファイルがあります。次のようになります。

.git
.vim
config
.vimrc
.bashrc

このリストは完全ではなく、必要な数のアイテムを含めることができます。 .を使用するときにこれらのファイル/ディレクトリをどのように無視できますかfind

これを試しましたが、find . -type f ! -path ...動的リストをパラメータとして渡すことはできません。

答え1

拡張正規表現(BSD、GNU)をサポートする実装では、find次のことができます。-regex-E -regex-regextype posix-extended -regex

find . -regextype posix-extended -regex "\./($(
  sed 's@[][\\|^$.*+?{}()]@\\&@g' < list | paste -sd '|' -))" -prune -o \( \
    -type f -print \)

これは、これらのファイル/ディレクトリとその中にあるすべてのファイル/サブディレクトリを除外findします-prune

..\..*

答え2

これに対するラッパー関数を定義します。

find_exclude(){
    while read -r ext; do set "$@" \! -name "$ext"; done
    find . -type f "$@"
}

$ find -type f
./config
./.vim
./dir/.git
./list
$ cat list
.vim
.git
config
$ find_exclude <list
./list

関連情報