助けてください。私は学生であり、練習して学ぶためにオンラインでこの質問を見つけました。
私は与えられたディレクトリ内のすべてのエントリをエコーするプログラムを作成しています。ディレクトリのエントリがファイルの場合、サイズが表示されます。エントリがディレクトリの場合、そのディレクトリにいくつのエントリがあるかどうかが表示されます。以下の私のプログラムは、特定のディレクトリ内のファイルをエコーします。私の質問は、ファイルサイズをエコーし、ディレクトリ内のアイテム数をエコーする方法です。私のプログラムは次のとおりです
ありがとうございます!
#! /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 dotglob
shopt dotglob