Linux-Ubuntu /ディレクトリにあるファイルとファイルの数を見たいです。

Linux-Ubuntu /ディレクトリにあるファイルとファイルの数を見たいです。

ディレクトリ(デスクトップ)のファイルとシェルスクリプトのファイル数を見たいです。どうすればいいですか?

私はこれを見つけましたか?

#!/bin/bash

echo "Files:"
find . -maxdepth 1 -type f

echo "Number of files:"
ls -Anq | grep -c '^-'

答え1

正しいと確認されましたが、分析してはいけないls、ファイルの数さえ見つかりません。 GNU検索があるので選択してください。

#!/bin/bash
echo "Files:"
find . -maxdepth 1 -type f

echo "Number of files:"
find . -maxdepth 1 -type f -printf . | wc -c

2番目はファイルごとにfindaを印刷して.からwcポイントを計算します。

答え2

findここは必要ありません。

#!/bin/bash

# nullglob: make patterns that don't match expand to nothing
# dotglob: also expand patterns to hidden names
shopt -s nullglob dotglob

names=( * )    # all names in the current directory
regular_files=()

# separate out regular files into the "regular_files" array
for name in "${names[@]}"; do
    # the -L test is true for symbolic links, we want to skip these
    if [[ -f $name ]] && [[ ! -L $name ]]; then
        regular_files+=( "$name" )
    fi
done

printf 'There are %d names (%d regular files)\n' "${#names[@]}" "${#regular_files[@]}"
printf 'The regular files are:\n'
printf '\t%s\n' "${regular_files[@]}"

またはzsh

#!/bin/zsh

# "ND" corresponds to setting nullglob and dotglob for the pattern
names=( *(ND) )
regular_files=( *(.ND) )   # "." selects only regular files

printf 'There are %d names (%d regular files)\n' "${#names[@]}" "${#regular_files[@]}"
printf 'The regular files are:\n'
printf '\t%s\n' "${regular_files[@]}"

関連情報