アプリケーションの行数を取得したい。私はこのコードを使用しています:
find . "(" -name "*.m" -or -name "*.h" ")" -print | xargs wc -l
他のアプリケーションでは正常に動作していますが、私のアプリケーションの1つでは、「xargsuntermifiedquote」というエラーが発生しています。
ファイル名の1つに引用符が含まれていますか?次のようなものを試してください。
find . "(" -name "*.m" -or -name "*.h" ")" -print0 | xargs -0 wc -l
-print0
引数は、find
出力する各名前を終了するためにNULL文字を使用するように指示します。-0
引数は、そのxargs
入力トークンがNULLで終了することを示しています。これにより、引用符のように特別なものとして扱われる文字の問題を回避できます。
これは、ファイル名のどこかに一重引用符が含まれているために発生する可能性があります...
すなわち、->'
問題のあるファイルを見つけるには、ターミナルで次のコマンドを実行します。
\find . | grep \'
このようなxargsを実行して、この問題に効果的に対処することもできます。
xargs -I
また、問題の原因となっているxargsセットアップのエイリアスがある場合にも発生する可能性があります。これが当てはまるかどうかをテストするには\
、前にaを付けてxargsを実行します。
\find . | \xargs ....
\は、単に「エイリアスなしでコマンドを実行する」ことを意味します
を使用するときに引用符、スペース、および特殊文字の問題を解決する標準的な方法は、の代わりにオプションfind
を使用することです。-exec
xargs
あなたの場合、あなたは使うことができます:
find . "(" -name "*.m" -or -name "*.h" ")" -exec wc -l "{}" \;
少し手を加えた後、このコマンドが機能することがわかりました(ファイル名にスペースと一致しない引用符が含まれているため):
find . -iname "*USA*" -exec cp "{}" /Directory/to/put/file/ \;
.
検索が実行されている場所を指します
-iname
後に続く式は一致基準を示します
-exec cp "{}" /Directory/to/put/file/ \;
-iname
を介して検出された各ファイルが置換される場所でコピーコマンドを実行するようにコマンドに指示します"{}"
ステートメントが終了\;
していることをexecコマンドに示す必要があります。cp