.shファイルを使用してディレクトリ内のファイル数を返します。

.shファイルを使用してディレクトリ内のファイル数を返します。

以下のスクリプトを作成しましたが、ディレクトリ内のファイル数に関係なく、ディレクトリ内のファイル数に対して0を返します。

source ~/Alan/assign/changeDir.sh
num=$(( ls | wc -l ))
echo $num

ChangeDir.shスクリプトは次のとおりです

function my_cd() {
cd ~/Alan
}

私にとって必要なのは、後で同じスクリプトで使用できるように数字を返すことです。これについての指示をいただきありがとうございます。ありがとう

ベストアンサー1

単一のディレクトリにある名前の数を見つけるには、*その中のglobを展開して生成された単語の数を数えます。

shopt -s nullglob    # to make the * glob expand to nothing
                     # if there is no matching names
set -- *
num=$#

printf '%s\n' "$num"

特別な値$#は位置引数の数です。このsetコマンドは位置パラメータを設定します。

数えてみたいですか?定期的なファイルのみを含め、隠し名前を含めてから

shopt -s nullglob dotglob

for name in *; do
    if [ ! -f "$name" ] || [ -L "$name" ]; then
        # skip non-regular files and symbolic links
        continue
    fi
    files+=( "$name" )
done

num=${#files[@]}

printf '%s\n' "$num"

サブディレクトリでこれを繰り返し実行するには、globstarシェルオプションも設定し、それを**/*グローブパターンとして使用します。

zshシェルではを使用しても十分ですset -- **/*(.DN); print $#

あなたの問題

num=$(( ls | wc -l ))

2つです:

  1. $(( ... ))算術拡張です。ここでコマンドの置き換えを実行する必要があるかもしれません$( ... )
  2. wc -lファイル数はカウントされません。出力の改行数を計算しますls。名前に1つ以上の改行が含まれるファイルは、複数のファイルと見なされますwc -l。を使用してこのようなファイルを生成してテストできますtouch $'hello\nworld'

おすすめ記事