2016-05-11 6 views
0

私は現在、100個ほどのディレクトリをそれぞれロールスルーしてスクリプトを実行する必要があるディレクトリ構造を持っています。他のディレクトリの。findコマンドでディレクトリを除外し、他のディレクトリでスクリプトを実行する

これは私が過去に使用されているものです:

find ./OTHER/ -maxdepth 2 -wholename '*_*/*.txt' -execdir /files/bin/other_process {} + 

私は、このチェックから特定のディレクトリを除外したいと思いますし、この問題への十分な答えを見つけることができます。

これが問題で私の最高の試み(または2)となっている:私は取得

find ./OTHER/ \(-path ./OTHER/X???_EXCLUDE_THIS -prune -o -path ./OTHER/X???_IGNORE_THIS -prune -o \) -type d \(-name *_*/*.txt \) -execdir /files/bin/other_process {} + 

find: paths must precede expression ./OTHER/A101_EXCLUDE_THIS/ 

は、これは私が私が使用しているほぼすべてのバリエーションを乗るリターンです。

+0

は現時点でテストすることはできませんが、./OTHER/ \(-path」が見つかり '試みる./OTHER/X???_EXCLUDE_THIS/*。txt '-execdir echo/files/bin/other_process {} + '' -o'を削除してください。それが動作すれば 'エコー ' – BroSlow

答えて

0

これが問題で私の最高の試み(または2)となっている。この試みで

find ./OTHER/ \(-path ./OTHER/X???_EXCLUDE_THIS -prune -o -path ./OTHER/X???_IGNORE_THIS -prune -o \) -type d \(-name *_*/*.txt \) -execdir /files/bin/other_process {} + 

エラー:

  • \(-name\(の後にスペースが存在する必要があります。
  • -name *_*/*.txt-nameはファイル名のベースです。ここで-pathを使用してください。
  • *_*/*.txt:シェルによる拡張を防ぐには、このようなパターンを引用する必要があります。
  • -o \)-oは式の最後に属しません。 \) -oを意味します。しかしここではカッコは必要ありません。
  • -type d:あなたは通常のファイル*.txtを見つけたいので、あなたがD irectoryを探してはいけません。修正これらのエラーで

、それは動作します:

find ./OTHER/ -path './OTHER/X???_EXCLUDE_THIS' -prune -o -path './OTHER/X???_IGNORE_THIS' -prune -o -path '*_*/*.txt' -execdir echo {} + 
関連する問題