45

アプリケーションの行数を取得したい。私はこのコードを使用しています:

find . "(" -name "*.m" -or -name "*.h" ")" -print | xargs wc -l

他のアプリケーションでは正常に動作していますが、私のアプリケーションの1つでは、「xargsuntermifiedquote」というエラーが発生しています。

4

4 に答える 4

86

ファイル名の1つに引用符が含まれていますか?次のようなものを試してください。

find . "(" -name "*.m" -or -name "*.h" ")" -print0 | xargs -0 wc -l

-print0引数は、find出力する各名前を終了するためにNULL文字を使用するように指示します。-0引数は、そのxargs入力トークンがNULLで終了することを示しています。これにより、引用符のように特別なものとして扱われる文字の問題を回避できます。

于 2012-07-25T13:00:31.080 に答える
15

これは、ファイル名のどこかに一重引用符が含まれているために発生する可能性があります...

すなわち、->'

問題のあるファイルを見つけるには、ターミナルで次のコマンドを実行します。

\find . | grep \' 

このようなxargsを実行して、この問題に効果的に対処することもできます。

xargs -I

また、問題の原因となっているxargsセットアップのエイリアスがある場合にも発生する可能性があります。これが当てはまるかどうかをテストするには\、前にaを付けてxargsを実行します。

\find . | \xargs ....

\は、単に「エイリアスなしでコマンドを実行する」ことを意味します

于 2014-09-14T01:22:43.730 に答える
5

を使用するときに引用符、スペース、および特殊文字の問題を解決する標準的な方法は、の代わりにオプションfindを使用することです。-execxargs

あなたの場合、あなたは使うことができます:

find . "(" -name "*.m" -or -name "*.h" ")" -exec wc -l "{}" \;
于 2018-09-09T09:41:20.517 に答える
1

少し手を加えた後、このコマンドが機能することがわかりました(ファイル名にスペースと一致しない引用符が含まれているため):

find . -iname "*USA*" -exec cp "{}" /Directory/to/put/file/ \;

.検索が実行されている場所を指します

-iname後に続く式は一致基準を示します

-exec cp "{}" /Directory/to/put/file/ \;-inameを介して検出された各ファイルが置換される場所でコピーコマンドを実行するようにコマンドに指示します"{}"

ステートメントが終了\;していることをexecコマンドに示す必要があります。cp

于 2018-09-23T03:13:12.237 に答える