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