2017-06-06 1 views
-4

ループを使ってディレクトリ内のファイル数をカウントするにはどうすればbashスクリプトを作成できますか?(unix)ループを使ってディレクトリ内のファイル数を数えるスクリプトを書く方法

スクリプトは、ターゲットディレクトリと出力を取る必要があります。中::

+3

[シェルスクリプト内のディレクトリ内のファイルの一覧を取得する方法](https://stackoverflow.com/questions/2437452/how-to-get-the-list-of-files-シェルスクリプト内のディレクトリ) – Nick

+0

"gimme teh codez"のために、この質問をトピックとして閉じようとしています。スタックオーバーフローはコード記述サービスではありません。 – EJoshuaS

答えて

1
#!/bin/bash 

counter=0 

if [ ! -d "$1" ] 
    then 
    printf "%s\n" " $1 is not a directory" 
    exit 0 
fi 

directory="$1" 
number="${directory##*/}" 
number=${#number} 

if [ $number -gt 0 ] 
    then 
    directory="$directory/" 
fi 

for line in ${directory}* 
    do 
    if [ -d "$line" ] 
     then 
     continue 
     else 
     counter=$(($counter + 1)) 
    fi 
    done 
printf "%s\n" "Number of files in $directory :: $counter" 
+0

訂正: '$ 1/*'の行のために(/は省略され、{}は余計です) 'if [-d" $ line "]'(ファイル名は埋め込み空白を引用して引用する必要があります) – cdarke

+0

私はあなたが示唆した訂正をしましたが、私は{ディレクトリ}を残しました*あなたはそれがスーパーフルーだと思っていますが、それは改善されていると思います。私はまた、スラッシュの存在を確認しました。 –

0

ファイルの数は、あなたは本当にループを必要としません。以下は、ディレクトリ内のファイルをカウントします:

files=($(ls $1)) 
echo ${#files[@]} 
+0

ファイル名に空白が含まれていると、これは不正確になります。 – cdarke

+1

これはディレクトリも考慮しません。ファイルとして数えられます – codemonkey

1

私は(GNU)findwcを使用します。

find /path/to/dir -maxdepth 1 -type f -printf '.' | wc -c 

上記findのコマンドは、ディレクトリとwc -cカウント内のすべてのファイルのためのドットを印刷しますそれらの点。これは、ファイル名に特殊文字(空白と改行を含む)があればうまく動作します。

関連する問題