查找匹配扩展名的文件,然后统计找到的目录中的文件数量

查找匹配扩展名的文件,然后统计找到的目录中的文件数量

我正在尝试在文件系统中搜索与扩展名 ( *.what) 匹配的所有文件,然后计算找到这些文件的目录中的所有文件*.what。输出应包含目录名称和文件名以及计数。

如何才能做到这一点?

答案1

首先,您需要find在终端中使用该命令。

find . -type f -name "*.what"

这将列出系统当前目录“。”中与“type: file”匹配且名称为“*.what”的所有文件。

因此你可以将其合并到 bash 脚本中,如下所示:

编辑

给你,我想这就是你想要的。

#!/bin/bash

src=${1:-"."}
ext=${2:-"what"}

for dir in `find ${src} -type f -name "*.${ext}"`; do
    dir=`echo ${dir} | awk 'BEGIN{FS=OFS="/"}{$NF=""}{print}'`
    echo ${dir} "has" `ls -l ${dir} | awk '!NR=1 && !/^d/ && !/*.what/ {print $NF}' | wc -l` "file(s)"
done

这将输出所有目录中包含 *.what 的文件数量(递归)。文件数量不包括目录!/^d/和 *.what 文件!/*.what/

这应该能帮到你。至少在我的系统上有效,前提是我理解了这个问题。

答案2

尝试这个管道:

find -name '*.what' -exec dirname {} \; | sort | uniq -c

答案3

$ cat tmp/example.awk
{
   一个[$1]++
} 结尾 {
   对于(i 在 a 中){
     dir=i; gsub(" ", "\\ ", dir) ;
     printf "echo %s: %d; cd %s; ls -1 *htm; cd ->/dev/null; echo\n", \
        我,a[i],目录,目录
   }
}

示例输出:

find . -iname "*.htm" -printf "%h\t%f\n" |sort |\
    awk -F'\t' -f tmp/example.awk |sh
(...)
./fpsu/applikasjon/kjerne/lib: 1
xom-1.0b5.htm

./tmp/refcp/refcp/home/jaroslav/reference/programing/输入处理: 1
大写+个人+姓名.htm

./下载/索引文件:3
allclasses-框架.htm
概述框架.htm
概述-摘要.htm

./tmp/refcp/refcp/home/jaroslav/reference/code/html-css/common-web-fonts_files: 6
托管徽章_002.htm
托管徽章_003.htm
托管徽章.htm
喜欢_002.htm
喜欢_003.htm
喜欢.htm
(...)

第一步是打印具有给定扩展名的每个文件夹和文件名。这可以通过 find 的 printf 的 %h %t 参数来实现。

下一步是在 awk 程序中使用 a[$1]++ 计算给定文件夹中的每个条目。也就是说,对于打印的每一行,我们都会增加一个数组条目,其索引等于找到的包含具有给定后缀的文件的目录的名称。

当所有条目都已计数后,我们会回显一个简单的 shell 命令来打印结果并列出我们找到的每个目录中的文件。

结果是我们通过管道传入的 shell 命令列表sh

答案4

find -name *.c|grep -c .c

这将找到扩展名为 .c 的项目数

find -name *.c 

将列出扩展名为 .c 的项目的目录结构

!/bin/bash

find -name *$1|grep -c $1
find -name *$1

将其保存为 /home/yourname/bin 中的 list.sh

Chmod +x list.sh
chown {username} list.sh

通过列表 *.extension 在任何地方调用它

例子list *.c

相关内容