各ディレクトリにいくつのファイルがあるか知りたいディレクトリのリストを含むファイルがあります。
.../images/idsuffix/userids /
これにより、各ディレクトリではなく、最初の5つのディレクトリのファイルとディレクトリの数がわかります。
検索./images/00{0..5}/ |トイレ
私が欲しいのは、各ディレクトリのコンテンツの数です。 xargsに渡そうとしましたが、同じことを行い、すべてのディレクトリのカウントを生成します。
ls ./images/ > directories.lst
cat directories.lst | xargs -i{} find {} | wc
そして、これはまったく出力を生成しません。
cat directories.lst | xargs -I{} bash -s "find {} | wc"
コマンドの-exec部分でshを使用すると、他のシェルを起動して、そこでコマンドを非常にうまく実行できます。
見つける。 -name "* .dat" -exec csh -c'echo -n $ 1; grep ID $ 1 | wc -l '{} {} \;
または私の場合、ディレクトリ内のファイルを数えるとき。 「ls-f」を使用すると、ls出力がソートされずに生成され、カウントする前に出力をソートしようとするのが大幅に高速になります。
ディレクトリ名とカウントの間に改行があります
find/somedir/some/dir -type d -print -exec sh -c'ls -f $ 1/* | wc -l '{} {} \;
出力は次のようになります
/ dir/somedir/002/1066002
6
ディレクトリ名とカウントの間にタブがあります
find/somedir/some/dir -type d -exec bash -c'echo -en "$ 1\t"; ls -f $ 1/* | wc -l '{} {} \;
出力は次のようになります
/ dir/somedir/002/1066002 6
http://www.compuspec.net/reference/os/solaris/find/find_and_execute_with_pipe.shtml
Forループを使用できます。
for dir in ./images/* ; do echo $dir ; ls "$dir" | wc ; done
ドットファイルも含める場合は、ls -a
を使用します。
Dot-dirsのファイルもカウントしたい場合は、for dir in ./images/* ./images/.*
を使用してください。
いくつかの非ディレクトリがある場合は、テストを追加できます。
for dir in ./images/* ; do
if [[ -d $dir ]] ; then
echo $dir
ls "$dir" | wc
fi
done
ファイルからディレクトリリストを読み取りたい場合は、次のようにします。
$ for dir in $(cat directories.lst); do echo "$dir : `ls $dir | wc -l`"; done
ただし、次のファイルは必要ありません。
$ for dir in $(find images/ -type d); do echo "$dir : `ls $dir | wc -l`"; done
また、最上位のディレクトリのみが必要な場合:
$ for dir in $(find images/ -maxdepth 1 -type d); do echo "$dir : `ls $dir | wc -l`"; done
最後に、ファイル名にスペースがある場合は、次のようにします。
$ SAVEIFS=$IFS; IFS=$(echo -en "\n\b"); for dir in $(find images/ -type d); do echo "$dir : `ls $dir | wc -l`"; done; IFS=SAVEIFS