0

正規表現を使用して検索することにより、ファイルが報告されないようにしたい。ただし、これは、検索するパス引数が。である場合にのみ機能するようです。(ドット)。パスを指定するとすぐに、findは何も返しません。

フォルダ内の2つのファイル:

~/xtmp/testfind> ls
test1.tmp.txt   test1.txt

パスを。として指定することで期待される結果。

~/xtmp/testfind> find . -regex '.*txt.*' ! -regex '.*tmp.*' 
./test1.txt

$ PWDでは、何も見つかりません。

~/xtmp/testfind> find $PWD -regex '.*txt.*' ! -regex '.*tmp.*' 
~/xtmp/testfind>

!を削除します 正規表現はすべてを検出するので、$ PWDは正しいです:

~/xtmp/testfind> find $PWD -regex '.*txt.*' 
[...]/xtmp/testfind/test1.tmp.txt
[...]/xtmp/testfind/test1.txt
4

1 に答える 1

1

パスには文字列tmp(as /xtmp/)が含まれているため、除外! -regex '.*tmp.*'は常に一致します。この種のネガティブマッチングを正規表現で適切に行うことは非常に困難です。ただし、この場合、おそらくglobと-name(これは最終的なパス名コンポーネントにのみ一致し、それにつながるパスには一致しません)を使用する必要があります。

find $PWD -name '*txt*' ! -name '*tmp*'
于 2012-04-24T08:15:56.073 に答える