2016-10-20 5 views
0

ファイル名マスクパターンがfilemask1またはfilemask2のすべてのファイルを検索し、指定されたディレクトリに含まれているunwanted*パターンを除外したいとします。私は以下を実行しようとしています:findコマンドが意図したとおりに実行されない

find dir/ other_dir/ parent/child/dir/ parent/child/other_dir/ parent/other_dir/ -iname '*filemask1*' -o -iname '*filemask2*' ! -iname '*unwatned1*' ! -iname '*unwanted2*' ! -iname '*unwanted3*' ! -iname '*unwanted4*' ! -iname '*unwanted5*' ! -iname '*unwanted6*' ! -iname '*.xls*' 

私はこれを検索しようとしている各パスが含まれているディレクトリから実行しています。上記は不要なパターンを除外することなく、指定されたディレクトリ内のすべてのファイルを私に与えます。

find dir/ other_dir/ parent/child/dir/ parent/child/other_dir/ parent/other_dir/ \(-iname '*filemask1*' -o -iname '*filemask2*'\) ! -iname '*unwatned1*' ! -iname '*unwanted2*' ! -iname '*unwanted3*' ! -iname '*unwanted4*' ! -iname '*unwanted5*' ! -iname '*unwanted6*' ! -iname '*.xls*' 

は私を与える:

find: invalid expression; you have used a binary operator '-o' with nothing before it. 

find dir/ other_dir/ parent/child/dir/ parent/child/other_dir/ parent/other_dir/ ! -iname '*unwatned1*' ! -iname '*unwanted2*' ! -iname '*unwanted3*' ! -iname '*unwanted4*' ! -iname '*unwanted5*' ! -iname '*unwanted6*' ! -iname '*.xls*' \(-iname '*filemask1*' -o -iname '*filemask2*'\) 

は私に

find: paths must precede expression: (-iname 
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression] 

を与えている間、私はこれを解釈取得する方法について何かが足りないのですか?これを簡略化して冗長ではない方法がありますか?私は、より良いファイル名を持つことで多くの問題が緩和されることを認識していますが、私はそれをコントロールできません:/

誰かが含まれるディレクトリの複数のパターンを削除する方法があれば

答えて

1

で検索するように指定されたディレクトリで、あなたの最初の質問に対する答えは、欲しい名前と不要な名前を別々にグループ化することです。

find \ 
dir/ other_dir/ parent/child/dir/ parent/child/other_dir/ parent/other_dir/ \ 
\(-iname '*filemask1*' -o -iname '*filemask2*' \) \ 
! \(-iname '*unwatned1*' -o -iname '*unwanted2*' -o -iname '*unwanted3*' -o -iname '*unwanted4*' -o -iname '*unwanted5*' -o -iname '*unwanted6*' -o -iname '*.xls*' \) 

また、不要なdirは単純なregexpで除外できます。

関連する問題