0

このコマンドの形式は、最後に使用したときから変更されていると思いますが、今では、コマンドが何を期待しているのか理解できていません。

エラーが発生します:find: unknown predicate '-name=*.xml'

find を呼び出そうとしているように見える方法は次のとおりです。

find . \( -name="*.xml" \) -ls

私はこの構文を理解していません:(ネストされたシェルを作成しようとしていますか?なぜそうなら?引数のリストを作成しようとしていますか?なぜそうなら?

この関数を編集して括弧を削除するだけかもしれませんが、なぜそこに入れるのでしょうか? 私は何かが欠けているに違いない。

4

1 に答える 1

2

かっこは、まとめた検索用語を論理グループにグループ化して、後で他のものに影響を与えないようにします。それらは、そこに入れる可能性のあるものを完全にカプセル化して、-ls(または他の変数設定などのために追加される可能性のある他のオプション)が常に実行されるようにするためにそこに置かれているのではないかと思います。括弧は括弧の最上位です。ネストされたシェルを作成しようとしているわけではありません。それが s が存在する理由\です。自分自身を見つけるためにそれらを渡します。

しかし、あなたの本当の問題は、 find の後に記号-nameではなくスペースが必要であることです。=(つまり、への引数-nameは別の引数である必要があります)。getopt_long これは、他のツール (特に、GNU解析実装を使用して記述されたもの) から期待される二重ダッシュの引数の多くのようには機能しません。

だから、-name *.xml代わりに試してみてください。

追加情報については、()sに関する find man ページを次に示します。

   ( expr )
          Force  precedence.   Since parentheses are special to the shell,
          you will normally need to quote them.  Many of the  examples  in
          this  manual  page  use  backslashes for this purpose: `\(...\)'
          instead of `(...)'.
于 2012-09-04T12:08:46.057 に答える