0
find . -type f -exec sh -c '  if [cat ${1} == "abc" ]   then  echo ${1} fi' _ {} \;

このエラーが発生しました:

_: -c: line 1: syntax error: unexpected end of file

ここで何をすべきかは次のとおりです。

このディレクトリ内のすべてのファイルを検索し、ファイルの内容が abc の場合はファイル名を出力します。

ありがとうございました !

4

2 に答える 2

1

「[」の後、「]」および「;」の前にスペースを入れてください。後に ']'

別の方法は使用することです

[ `cat ${1}` == "abc" ] && echo ${1}
于 2012-08-15T22:39:52.327 に答える
1

ここでの問題は、 (別名「テスト」) を次のようにスペースで[区切る必要があることです。cat

find . -type f -exec sh -c 'if [ cat ${1} = "abc" ]; then  echo ${1}; fi' _ {} \;

ifまた、ステートメントの後とステートメントの前にセミコロンがありませんfi(おそらくインデントした方法が原因で、そこにあったスペースに基づいて、元々これらが別々の行にあったようです)

以下のコメントで指摘されているように、これを実行するとエラー メッセージが表示されますtoo many arguments in if []。二重引用符を使用"cat ${1}"すると、エラー メッセージを回避できますが、これは の展開を と比較するだけ"cat ${1}"です"abc"。おそらく探しているのは[ "$(cat ${1})" == "abc" ]. 残念ながら、これは、非常に長いファイルを と比較するときに問題を引き起こす可能性があります"abc"

を使用してテストを実行するか、ファイルのgrepチェックサム (例: ) を取得し、テストを実行する理由に応じて、 のチェックサムに対してテストすることができます。shasum"abc"

于 2012-08-15T22:41:42.933 に答える