2016-12-26 12 views
0

シェルスクリプトの新機能です。私はfindからファイルパスのリストをループし、リスト内の各ファイルの行数を数えようとしています。ファイルパスには空白が含まれているため、単一の要素ではなくforループ内の別々の要素として解釈されます。ファイルパスのリストのスペースをエスケープする

Iは、次の実行時:

for filepath in `find . -name '*.m'`; do echo $filepath; done; 

を私はスペースでパスのいくつかは複数行にわたって印刷される代わりに、同一線上に印刷されることがわかります。

どのように各ファイルパスのスペースをエスケープしますか?

+0

[BashFAQ#20:改行、スペース、またはその両方を含むファイル名を検索して安全に処理する方法は?](http://mywiki.wooledge.org/BashFAQ/020)を参照してください。 –

答えて

1

findからファイルパスのリストをループし、リスト内の各ファイルの行数を数えようとしています。

以下、これを行うための適切な方法である:

find . -type f -name '*.md' -exec wc -l {} \; 

for .. inループがIFS区切られた単語のリストを受け付けます。 IFSにはデフォルトでスペースが含まれているので、ファイル名内のスペースは実際にファイル名を別々の単語に分割します。

+0

'find'の結果がディレクトリの場合、' wc'を使う方法は? – Buck

関連する問題