たとえば、説明するのが最善だと思います。
parent1 (located inside /home/myuser
- folder1
- test11.png
- test11.txt
- folder11
- test111.png
- folder12
- test121.png
- test122.png
- folder2
- test21.png
台本を書けたら
get-number-of-files-per-folder "parent" png
出力は次のようになります。
folder1: 4
folder2: 1
現在、このコマンドを使用していますが、リストしたファイル拡張子だけでなく、すべてのファイルを計算しているようです。
find /home/myuser/parent -maxdepth 1 -mindepth 1 -type d -exec sh -c 'echo "{} : $(find "{}" -iname "*png" -type f | wc -l)" file\(s\)' \;
これが間違っているかどうかはどうすればわかりますか?私がこれを実行するとき
find /home/myuser/parent -iname '*jpg' -type f | wc -l
JPGファイルがないことがわかりますが、上記のスクリプトでは、フォルダにxx個のファイルがあることがわかります。
ベストアンサー1
簡単なシェルスクリプト方法:
#!/bin/sh
if [ "$#" -ne 2 ]; then
echo "Usage: $0 directory extension" >&2
exit 1
fi
cd "$1" || exit 1
for d in *; do
[ -d "$d" ] || continue
printf "%s: %i\n" "$d" \
"$(find "$d" -type f -name "*.$2" -printf '1\n' | wc -l)"
done
...シェルを使用して、ターゲットディレクトリのすべてのファイル/ディレクトリを繰り返します(もちろん、始まる隠しファイル/ディレクトリを除く.
)。ディレクトリ以外のエントリは無視され、ディレクトリの場合は名前とファイル数(およびfind
を使用して取得wc
)を印刷します。このように、find … -printf '1\n'
findは1
見つかったすべてのファイルを印刷します。ファイル名を印刷しないと、ファイル名の改行などのすべての問題を回避できます。行数だけ数えます。それがすべてです。