1

これが私が取り組んでいる問題です

さまざまなディレクトリにたくさんのファイルがあり、それらはすべて1つのルートディレクトリにあります。私はこれらすべてのフォルダをスキャンし、特定のサブディレクトリを避けてそれらのファイルを取得しました。私が避けなければならないこれらのフォルダは、設定ファイルから来ます。目的のために、私はこの検索コマンドを準備しました(いくつかの助けを借りて)

find ${ROOT}/au* -type f -not \( -path '*auction123/incoming*' -o -path '*autobase/incoming*'* \)

ここで、ROOTも構成ファイルから取得されます。このためのプレースホルダーも提供できますか

-path '*auction123/incoming*' -o -path '*autobase/incoming*'*

検索で無視する必要のあるフォルダをいくつでも追加できるようにします。grepを使用する方が良いオプションであることがわかった場所で読んだことがあります。

4

1 に答える 1

0

できるよ:

find ${ROOT}/au* -type f | grep -v -f files_containing_list_of_ignore_directories

無視files_containing_list_of_ignore_directoriesする各ディレクトリを別々の行に配置します(ワイルドカードなし*)。

(これは次のようにfiles_containing_list_of_ignore_directoriesなります:)

auction123/incoming
autobase/incoming
...

説明:

  • find ${ROOT}/au* -type fau*:で一致する任意のディレクトリの下にあるすべてのファイルを再帰的に検索します${ROOT}
  • |はシェルのパイプ演算子です。これは、「stdout前のコマンド(この場合)から出力されたものをすべて取得し、その出力を次のコマンド(この場合)findにフィードすることを意味します。stdingrep
  • grep:検索に使用するツールであるgrepを呼び出す
  • -v:の--invert-matchオプションを使用しますgrep。基本的には、一致するものをすべて「除外」することを意味します。
  • -f files_containing_list_of_ignore_directories:grepに一致させたいパターンのリストを保持するファイルを提供します(この場合はフィルターで除外します)。
于 2012-11-20T16:23:08.530 に答える