我想获得文件总数 -
是否可以按
列出文件数量例如。
如果目录结构类似 -
MM
|
|-- ART1
| |
| |-- img1.tif
| |-- img2.tif
| |-- img3.tif
| |-- img4.tif
|
|-- ART2
| |
| |-- img1.tif
| |-- .img2.tif
| |-- img.doc
| |-- img4.tif
结果应该像 -
MM\ART1 4 files
MM\ART2 2 files
Total Files: 6
我尝试使用 -
find . -print | grep -E '\.tif+$'
答案 0 :(得分:2)
这个怎么样?
$ find . -mindepth 1 -type f ! -name ".*" \( -name "*.tif" -or -name "*.jpeg" -or -name "*.gif" \) -exec sh -c 'file={}; printf "%s %s %s\n" $(dirname {}) $(basename {}) ${file##*.}' \; | awk '{a[$1]++; b[$3]++; tot++} END{for (i in a) print i, a[i]; for (i in b) print i, b[i]; print tot " files"}'
./ART1 4
./ART2 2
tif 6
6 files
如果我们在ART1 / foo.jpeg中创建另一个文件:
$ find . -mindepth 1 -type f ! -name ".*" \( -name "*.tif" -or -name "*.jpeg" -or -name "*.gif" \) -exec sh -c 'file={}; printf "%s %s %s\n" $(dirname {}) $(basename {}) ${file##*.}' \; | awk '{a[$1]++; b[$3]++; tot++} END{for (i in a) print a[i], i; for (i in b) print b[i], i; print tot " files"}'
5 ./ART1
2 ./ART2
1 jpeg
6 tif
7 files
$ find . -mindepth 1 -type f ! -name ".*" \( -name "*.tif" -or -name "*.jpeg" -or -name "*.gif" \) -exec sh -c 'file={}; printf "%s %s %s\n" $(dirname {}) $(basename {}) ${file##*.}' \;
./ART1 img2.tif tif
./ART1 img4.tif tif
./ART1 foo.jpeg jpeg
./ART1 img3.tif tif
./ART1 img1.tif tif
./ART2 img4.tif tif
./ART2 img1.tif tif
此find
命令查找与请求匹配的文件:
- 文件。
- 名称不以.
开头
- 分机tif
,jpeg
或gif
。
然后打印存储它的目录+名称+扩展名。
awk '{a[$1]++; b[$3]++; tot++} END{for (i in a) print a[i], i; for (i in b) print b[i], i; print tot " files"}'
根据以前的输出,它计算:
- 每个目录有多少个文件(第一条记录,即$1
)
- 每个扩展名有多少个文件(第三条记录,即$3
)
- 文件总数。
然后将它们打印在END{}
块上。