ディレクトリ内のファイルをエコー/印刷し、ファイルサイズをエコーし​​、ファイル数をエコーし​​ます。

ディレクトリ内のファイルをエコー/印刷し、ファイルサイズをエコーし​​、ファイル数をエコーし​​ます。

助けてください。私は学生であり、練習して学ぶためにオンラインでこの質問を見つけました。

私は与えられたディレクトリ内のすべてのエントリをエコーするプログラムを作成しています。ディレクトリのエントリがファイルの場合、サイズが表示されます。エントリがディレクトリの場合、そのディレクトリにいくつのエントリがあるかどうかが表示されます。以下の私のプログラムは、特定のディレクトリ内のファイルをエコーし​​ます。私の質問は、ファイルサイズをエコーし​​、ディレクトリ内のアイテム数をエコーする方法です。私のプログラムは次のとおりです

ありがとうございます!

#! /bin/bash
# Files Directory
read -p "Enter a Directory or File: " entry
target="$entry"
let count=0
for f in "$target"/*
do 
echo $(basename $f)
let count=count+1
done
echo "Files in the Directory: $count"
exit 0

答え1

学習中なので、完全なスクリプトではなく問題に関連するいくつかのガイドラインがここにあります。

Linuxシステムでファイルサイズを取得する方法はいくつかあります。stat便利バイトを直接要求できるので、良い選択です。

bytes=$(stat -c %s -- "$f")

別のオプションはトイレ施設:

bytes=$(wc -c < "$f")

ファイルをリダイレクトしたいことに注意してください。入力する wc反直感的ですwc -c "$f"。後者の形式はファイル名も出力するのに対し、前者(ファイル名が分からないため)はバイト数だけ出力するからです。

与えられたファイルが通常のファイルかディレクトリであるかをテストするための一般的なテストは次のとおりです。

if [ -d "$f" ]
then
  echo It is a directory
else
  echo It is not a directory
fi

ディレクトリ内の(隠されていない)ファイルの数を数えるには、いくつかのオプションがあります。

  • POSIX 指定setユーティリティーを使用します。

    set -- /path/to/dir/*;  echo "$#"
    
  • 配列の使用(bashタグを指定したため):

    files=( /path/to/dir/* )
    echo "There are ${#files[@]} files in there"
    

特定のディレクトリ内の「ファイル」(ファイルとディレクトリ)の数を計算します。ほとんどのシェルのデフォルトの動作は次のとおりです。無視する.bashrcたとえば、グローバルを展開するときにドットファイルを*実行したり、bashをshopt -s dotglob使って調整したりできます。shopt -u dotglobshopt dotglob

関連情報