我希望获得当前级别的文件夹列表(不包括它们的子文件夹),并简单地打印文件夹名和文件夹中文件数量的计数(如果可能,最好过滤到*.jpg )。
在标准的bash shell中,这是可能的吗?ls -l
打印除文件数量以外的所有内容:)
发布于 2009-03-10 02:09:52
我想出了这个:
find -maxdepth 1 -type d | while read dir; do
count=$(find "$dir" -maxdepth 1 -iname \*.jpg | wc -l)
echo "$dir ; $count"
done
如果考虑到子目录,在目录中搜索jpg文件应该是递归的,则删除第二个-maxdepth 1
。请注意,这只考虑了文件的名称。你可以重命名一个文件,隐藏它是一个jpg图片。您可以使用file
命令对内容进行猜测(现在,也可以递归搜索):
find -mindepth 1 -maxdepth 1 -type d | while read dir; do
count=$(find "$dir" -type f | xargs file -b --mime-type |
grep 'image/jpeg' | wc -l)
echo "$dir ; $count"
done
然而,这要慢得多,因为它必须读取文件的一部分,并最终解释它们包含的内容(如果幸运的话,它会在文件的开头找到一个神奇的id )。-mindepth 1
阻止它将.
(当前目录)打印为它搜索的另一个目录。
发布于 2009-03-10 02:25:37
我的是从命令行输入的更快。:)
与以下建议相比,其他建议是否提供了任何真正的优势?
find -name '*.jpg' | wc -l # recursive
find -maxdepth 1 -name '*.jpg' | wc -l # current directory only
发布于 2009-03-10 02:10:41
#!/bin/bash
for dir in `find . -type d | grep -v "\.$"`; do
echo $dir
ls $dir/*.jpg | wc -l
done;
https://stackoverflow.com/questions/628662
复制相似问题