我正在尝试在文件系统中搜索与扩展名 ( *.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