- ベストアンサー
UNIXでのコマンドエラーについて
初心者です。 UNIX上で下階層を含めて存在するファイルの数を知りたかったので ネットで検索して for d in `find . -type d`; do echo $d,`ls "$d" | wc -l`; done というコマンドをみつけて実行してみたのですが、 for: コマンドが見つかりません. d: 定義されていない変数です. というエラーとなってしまいます。 UNIX上のなにか制約があるのかどうかよく判りません。 どなたかなぜエラーが出るのかとこのコマンドを正常に実行する方法を教えていただけないでしょうか?
- みんなの回答 (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' \; とかの方がマシかもしれません。(厳密には改行コード含むファイル名あった場合その他イレギュラーがあると対応できてないですが、シェルには依存しない)
その他の回答 (1)
- t_ohta
- ベストアンサー率38% (5238/13705)
回答No.1
使っているOS、シェルは何ですか? CentOS 7, bash でそのコマンドを実行したら、問題無く実行されました。
質問者
お礼
こういった質問をする場合は動作環境をかくべきでした。 きがつかず申し訳ありませんでした。
お礼
大変的確な指摘とアドバイスありがとうございました。 なるほどという感じです。確かに、指摘していただいた様に実行すると動作させることができました。