找到匹配扩展名的文件,然后计算找到的目录中的文件


1

我试图在文件系统中搜索与extention(*.what)匹配的所有文件,然后计算它找到*.what文件的目录中的所有文件。输出应包含目录名和带计数的文件名。

如何才能做到这一点?


1
cd / folder find -name * .extension这将列出所有带扩展名的文件
Ajo Mathew

Answers:


4

首先,您将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(递归)的任何目录中的文件数。if文件的数字不包括目录!/^d/和* .what文件!/*.what/

那会让你到那儿。至少在我的系统上工作,假设我理解了这个问题。


嗯,一些工作不正常,脚本只输出1个文件然后结束。它不搜索所有目录和子目录。重申一下,我想找到任何以* .what结尾的文件,然后计算同一目录中所有文件的数量,而不仅仅计算pwd中的* .what文件。
Cyw

那是因为我误解了,目前只计算* .what的数量。我会更新几个。
nerdwaller

@Cyw更新于^^
nerdwaller

非常感谢!看起来更好,我仍然没有得到结果,并得到错误“awk:xregcomp:前面的正则表达式无效”可能是由于其VMware ESXi 5.x系统从BusyBox v1.9.1-VMware-visor-8630运行AWK( 2012-01-06 01:09:05 PST)多次调用二进制??
Cyw

是的,awk在busybox下可能会有不同的表现。尝试将其分解以查看它是什么,或两者都使用。
nerdwaller

1

试试这个管道:

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

我需要这个来计算找到* .what文件的任何目录中的文件,如果计数小于某些#,则显示该目录中的pwd和filename以及总文件数。这需要是递归搜索。谢谢你
Cyw

0
$ cat tmp / example.awk
{
   一个[$ 1] ++
} 结束 {
   for(i in a){
     DIR = I; gsub(“”,“\\”,dir);
     printf“echo%s:%d; cd%s; ls -1 * htm; cd  - > / dev / null; echo \ n”,
        我,[i],dir,dir
   }
}

样本输出:

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/input-processing:1
善用+个人+ names.htm

./Downloads/index文件:3
allclasses-frame.htm
概述 -  frame.htm
概述 -  summary.htm

./tmp/refcp/refcp/home/jaroslav/reference/code/html-css/common-web-fonts_files:6
hostedbadge_002.htm
hostedbadge_003.htm
hostedbadge.htm
like_002.htm
like_003.htm
like.htm
(......)

第一步是使用给定的扩展名打印每个文件夹和文件名。这是使用%h%t参数来查找printf。

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

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

结果是我们输入的shell命令列表sh


-1
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


我喜欢这一个。但你需要提出@ cYrus的建议。
nerdwaller

1
你应该引用*.c
cYrus

使用ubuntu它与报价工作..简单的脚本 #!/bin/bash find -name *$1|grep -c $1 find -name *$1
Ajo Mathew

更新答案简单的方式
Ajo Mathew

这是一个好的开始,但我需要一种方法来计算任何目录中找到* .what文件的所有文件,并显示文件名和目录名以及该目录中找到* .what文件的总文件数
Cyw
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.