• ベストアンサー

UNIXでのコマンドエラーについて

初心者です。 UNIX上で下階層を含めて存在するファイルの数を知りたかったので ネットで検索して for d in `find . -type d`; do echo $d,`ls "$d" | wc -l`; done というコマンドをみつけて実行してみたのですが、 for: コマンドが見つかりません. d: 定義されていない変数です. というエラーとなってしまいます。 UNIX上のなにか制約があるのかどうかよく判りません。 どなたかなぜエラーが出るのかとこのコマンドを正常に実行する方法を教えていただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • trapezium
  • ベストアンサー率62% (276/442)
回答No.2

for なんたらは sh 系構文なので csh 系では受け付けません。csh では foreach 代りに使うか、一時的に sh (or bash, ksh etc) に入ればそのコマンド打てます。 % sh $ for d in `find . -type d`; do echo $d,`ls "$d" | wc -l`; done $ exit or ^D % ただディレクトリやファイルに空白や記号を含むとちゃんと動作しないので、 find . -type d -exec sh -c 'echo -n "{}" ; ls "{}" | wc -l' \; とかの方がマシかもしれません。(厳密には改行コード含むファイル名あった場合その他イレギュラーがあると対応できてないですが、シェルには依存しない)

Kasaoka-Taroh
質問者

お礼

大変的確な指摘とアドバイスありがとうございました。 なるほどという感じです。確かに、指摘していただいた様に実行すると動作させることができました。

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.1

使っているOS、シェルは何ですか? CentOS 7, bash でそのコマンドを実行したら、問題無く実行されました。

Kasaoka-Taroh
質問者

お礼

こういった質問をする場合は動作環境をかくべきでした。 きがつかず申し訳ありませんでした。