こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

初心者です。
UNIX上で下階層を含めて存在するファイルの数を知りたかったので
ネットで検索して
for d in `find . -type d`; do echo $d,`ls "$d" | wc -l`; done
というコマンドをみつけて実行してみたのですが、

for: コマンドが見つかりません.
d: 定義されていない変数です.
というエラーとなってしまいます。
UNIX上のなにか制約があるのかどうかよく判りません。
どなたかなぜエラーが出るのかとこのコマンドを正常に実行する方法を教えていただけないでしょうか?

投稿日時 - 2017-07-13 11:35:59

QNo.9351415

困ってます

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

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' \;
とかの方がマシかもしれません。(厳密には改行コード含むファイル名あった場合その他イレギュラーがあると対応できてないですが、シェルには依存しない)

投稿日時 - 2017-07-13 14:14:37

お礼

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

投稿日時 - 2017-07-18 15:25:23

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

使っているOS、シェルは何ですか?

CentOS 7, bash でそのコマンドを実行したら、問題無く実行されました。

投稿日時 - 2017-07-13 12:48:00

お礼

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

投稿日時 - 2017-07-18 15:22:10

あなたにオススメの質問