アプリケーションの行数を取得したいのですが。私はこのコードを使用しています:
find . "(" -name "*.m" -or -name "*.h" ")" -print | xargs wc -l
他のアプリケーションでは問題なく機能していますが、私のアプリケーションの1つでは、「xargs unterminated quote」というエラーが発生します。
ファイル名の1つに引用符が含まれていますか?次のようなものを試してください:
find . "(" -name "*.m" -or -name "*.h" ")" -print0 | xargs -0 wc -l
-print0
引数は、出力する各名前を終了するためにNULL文字を使用するようにfind
に指示します。 -0
引数は、入力トークンがNULLで終了することをxargs
に伝えます。これにより、引用符のように特別なものとして扱われる文字の問題が回避されます。
これは、ファイル名に単一引用符がどこかに含まれているために発生する可能性があります...
すなわち-> '
問題のあるファイルを見つけるには、ターミナルで次のコマンドを実行します。
\find . | grep \'
また、問題を引き起こしているxargsセットアップのエイリアスがある場合にも発生する可能性があります。これが当てはまるかどうかをテストするには、xargsの前に「\」を付けて実行します。
\find . | \xargs ....
「\」は単に「エイリアスなしでコマンドを実行する」ことを意味します
find
を使用するときに引用符、スペース、特殊文字の問題を解決する標準的な方法は、xargs
ではなく-exec
オプションを使用することです。
あなたのケースではあなたが使うことができます:
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
で見つかった各ファイルが"{}"
を置き換えるコピーコマンドを実行するようにコマンドに指示します
cp
ステートメントが終了していることをexecコマンドに示すには、\;
が必要です。