2017-06-24 8 views
0

私はスクリプトに新しく、現在のディレクトリの各フォルダ(およびサブフォルダ)内のファイル数をカウントするスクリプトを作成しようとしています。私は非効率的に合計をカウントするようにfindコマンドを使用することなく、forループの後にファイルの総数を印刷したいのですが、forループでカウントを継続し、末尾に合計を出力する変数

for dir in $(ls -pa | grep/| tail -n +3); do 
    echo "${dir%/}: $(find ${dir} -type f | wc -l)" 
done 

をしかし:

このスクリプトは、[OK]を動作しているようです。

私はいくつかのことを成功させて試しました。

for dir in $(ls -pa | grep/| tail -n +3); do 
    echo "${dir%/}: `count=`$(find ${dir} -type f | wc -l)" 
    total=$((total+count)) 
done 

echo "total: $total" 

私のコマンドの置き換えが正しいかどうかわかりません。ありがとう

答えて

-1

あなたのコードに間違っていますcount変数が正しく設定されていません。

この行では、count=は何も起こらないコマンド置換です。したがって、countは設定されません。には代入文はなく、コマンド置換と別のコマンド置換があります。だからここ
は、ソリューションです:

for dir in $(ls -pa | grep/| tail -n +3); do count=$(find ${dir} -type f | wc -l); echo "${dir%/}: $count"; total=$((total+count)); done; echo "total: $total" 
+0

ありがとう!私は成功していないこの1時間以上の周りにいじっていた。完全に動作します:) – elpy

+0

@elpy、あなたは大歓迎です。 – zhenguoli

0

すべてで現在のフォルダ(誰のファイルを含まない)の各直接サブフォルダに(再帰性を持つ)ファイルの数をカウントし、再集計することなく、ファイルの合計を計算するにはfind . -type f | wc -l do:

#!/usr/bin/env bash 

total=0 
for dir in $(find . -maxdepth 1 -type d -printf '%f\n' | sed 1d); do 
    echo "${dir}/: $(find ${dir} -type f | wc -l)" 
    total=$((total + count)) 
done 

echo "total: ${total}" 
+0

私はすでにこのコマンドを使用していると思います。しかし、ありがとう。 – elpy

+1

'$(ls -pa | grep/| tail -n +3)' '$(find -maxdepth 1 -type d)';) – glegoux

+0

ああ、今何を意味しているのか分かります。私のコマンドに関する知識はまだまだ小さく、それが論理的にフォルダを見つけることができる唯一の方法でした。ありがとう!! – elpy

関連する問題