ディレクトリ(デスクトップ)のファイルとシェルスクリプトのファイル数を見たいです。どうすればいいですか?
私はこれを見つけましたか?
#!/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番目はファイルごとにfind
aを印刷して.
から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[@]}"