Unix命令:查找目录中具有所需扩展名的文件数
我想得到文件的总数-Unix命令:查找目录中具有所需扩展名的文件数,unix,find,Unix,Find,我想得到文件的总数- 在所有目录和子目录中 扩展名为.tif/.jpeg/.gif 名称不应以“.”开头 是否可以根据列出文件的数量 例如 如果目录结构类似于- MM | |-- ART1 | | | |-- img1.tif | |-- img2.tif | |-- img3.tif | |-- img4.tif | |-- ART2 | | | |-- img1.tif | |-- .img2.tif | |-- img.doc
- 在所有目录和子目录中李>
- 扩展名为.tif/.jpeg/.gif
- 名称不应以“.”开头
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+$'
这个怎么样
$ 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
命令查找与请求内容匹配的文件:
-文件。
-名称不以开头
-扩展名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{}
块上打印它们
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"}'