Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix命令:查找目录中具有所需扩展名的文件数_Unix_Find - Fatal编程技术网

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"}'