130

私はこのようなディレクトリ構造を持っています

data
|___
   |
   abc
    |____incoming
   def
    |____incoming
    |____processed
   123
    |___incoming
   456
    |___incoming
    |___processed

データディレクトリ内のすべてのフォルダに着信サブフォルダがあります。def/incomingおよび456/incomingdirsを除くすべてのフォルダーとサブフォルダーからすべてのファイルを取得したいと思います。次のコマンドで試してみました

 find /home/feeds/data -type d \( -name 'def/incoming' -o -name '456/incoming' -o -name arkona \) -prune -o -name '*.*' -print

しかし、期待どおりに機能していません。

ラヴィ

4

6 に答える 6

228

これは機能します:

find /home/feeds/data -type f -not -path "*def/incoming*" -not -path "*456/incoming*"

説明:

  • find /home/feeds/data:指定されたパスから再帰的に検索を開始します
  • -type f:ファイルのみを検索
  • -not -path "*def/incoming*"def/incoming:パスの一部として何も含めないでください
  • -not -path "*456/incoming*"456/incoming:パスの一部として何も含めないでください
于 2012-11-19T19:22:27.833 に答える
12

ドキュメントのためだけに:検索とスキップのコンステレーションがたくさんあるので(私がしなければならなかったように)、もっと深く掘り下げる必要があるかもしれません。pruneあなたが期待することをしない間、それはあなたの友人であることがわかるかもしれません-not -path

したがって、これはディレクトリを除外する15の検索例の貴重な例です。

http://www.theunixschool.com/2012/07/find-command-15-examples-to-exclude.html

最初の質問にリンクするには、次のように最終的に私のために働いたものを除いて:

find . -regex-type posix-extended -regex ".*def/incoming.*|.*456/incoming.*" -prune -o -print 

次に、1つのファイルを検索してもパスを除外する場合は、を追加し| grep myFile.txtます。

検索バージョンによっても異なる場合があります。そうか:

$ find -version
GNU find version 4.2.27
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION SELINUX
于 2014-08-04T07:15:53.880 に答える
5

-nameパス全体ではなく、ファイル名にのみ一致します。-path代わりに、のようなディレクトリをプルーニングする部分に使用しますdef/incoming

于 2012-11-19T19:16:29.110 に答える
2
find $(INP_PATH} -type f -ls |grep -v "${INP_PATH}/.*/"
于 2018-01-17T22:12:58.963 に答える
1

findでディレクトリを除外する方法の回答に従ってください。コマンド

find . \( -name ".git" -o -name "node_modules" \) -prune -o -print
于 2020-04-08T11:45:31.163 に答える
0

これは私がすべての.gitディレクトリを除外し、-exec何かをgrepするためにそれを渡したものです

find . -not -path '*/\.*' -type f -exec grep "pattern" [] \;
  • -not -path '*/\.*'すべての隠しディレクトリを除外します
  • -type fタイプファイルのみが一覧表示され、それを他のファイルに渡すことができます-exec
于 2021-01-29T23:23:18.243 に答える