- ベストアンサー
複数のファイルをdiffで比較する方法とエラーの対処法
- 複数のファイルをdiffコマンドを使用して比較するためのシェルスクリプトを作成しましたが、エラーメッセージが表示されてしまいます。
- エラーメッセージ「diff: 「ファイル名」の後のオペランドがありません」が表示され、ファイルの比較ができません。
- 原因は、ファイル名の指定が正しくないことであり、変数$tempの中身が誤っています。正しいファイル名を指定することで問題が解決する可能性があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> htmlディレクトリとhtml_bkディレクトリ内にある > ファイルを比較する処理になります diff -r html html_bk で一発なんですけど.... このシェルスクリプトを完成させるなら # -nameで*を使いたいときは""で括る find ./html -name "*.html" -type f | while read f do # 実行結果を変数に取り込むならバッククオートを使う # 先頭が必ず ./html/ になるから、htmlを置き換えればいいのだけど、 # より正確にするなら、こんな感じ temp=`echo $f | sed 's|^\./html/|./html_bk/|'` # ファイル名の空白が含まれることも考慮して、""で括る diff "$f" "$temp" >> diff.txt done
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
いろいろ問題あるなぁ.... ・「$tempの中身はhtml_bkと変更されていました。」と書かれていますが, temp を変更している部分が見当たりません. 「更新されていた」というのはどのように確かめたのですか? ・*.html はクォートしないとまずい ・sed で置換する時になぜ g をつけている? ・そもそもこれはシェルスクリプトであってシェルではない
補足
Tacosanさん返答ありがとうございます。 変更内容は、echo $tempで画面に出力させて確認したのですが 確認の方法が間違っていましたでしょうか? htmlのクウォーとsedのgに関しては、記述が間違っておりました。 原因が分からなかったので、いろいろ試していた際に間違った記述をコピーしてしまいました。 シェルについては、痛いご指摘です。 何せほとんど書いたことがありませんので良くわかっておりません。
お礼
kmeeさん、返答ありがとうございます。 教えて頂いたとおりに書いたら動きました。 それに、-rオプションという便利なものがあったんですね。 丁寧に教えてもらったおかげで注意する点や勉強不足がはっきりと 分かりました。 ありがとうございました。