列出每个文件夹中文件名与模式匹配的文件数

康拉德

我想递归搜索目录树,并列出每个文件夹中具有与给定字符串相对应的名称的文件数。实际上,我想返回以下结果:

ls -l | wc -l

对于我通过确定的每个文件夹find

代码

下面的代码正确列出了每个文件夹中包含Magic Data字符串的文件数

find /path/to/cool/stuff                        \         
        -maxdepth 4                             \         
        -type d                                 \         
        -name '*Magic Data*'                    \         
        -print0 | xargs                         \         
                --verbose                       \         
                -0 -I {} ls -l {}               

我想扩展它,并将结果ls传送到wc -l

试图

find /path/to/cool/stuff                        \         
        -maxdepth 4                             \         
        -type d                                 \         
        -name '*Magic Data*'                    \         
        -print0 | xargs                         \         
                --verbose                       \         
                -0 -I {} ls -l {}  | wc -l            

这将失败并打印:

ls -l /path/to/cool/stuff/some/folders/Magic Data
ls -l /path/to/cool/stuff/some/folders2/Magic Data

所需的输出

/path/to/cool/stuff/some/folders/Magic Data  29
/path/to/cool/stuff/some/folders2/Magic Data 30

所需的输出将包含:

  • 搜索文件夹的完整路径
  • 的输出wc -l,在这种情况下,这反映了未隐藏文件的数量
库萨兰达

解决此问题的方法主要有两种:

  1. 修改find命令,使其仅输入您感兴趣的目录,然后x为其中的每个找到的文件打印一个字符(例如)。然后计算用产生的那个字符的数量wc -l输出字符比路径名更安全,因为Unix中的路径名可能包含换行符。这个解决方案有点棘手,因为它涉及-prune到忽略我们不感兴趣的目录,或者使用! -path

  2. 就像到目前为止一样,找到目录,然后使用内联脚本对其中的文件进行计数。这比较简单,下面是我要显示的内容。

find /path/to/cool/stuff -maxdepth 4 -type d -name "*Magic Data*' \
    -exec bash -O dotglob -c '
        dir=$1
        set -- "$dir"/*
        printf "%s %d\n" "$dir" "$#"' bash {} ';'

在这里,我们像您一样找到目录,然后针对每个目录运行以下简短bash脚本:

dir=$1
set -- "$dir"/*
printf "%s %d\n" "$dir" "$#"

这将从命令行获取目录的路径名(由给定find),并扩展其中的*glob模式。通过dotglob在脚本的命令行上设置shell选项,可以确保我们也计算隐藏文件和目录(删除-O dotglob时不计算隐藏名称)。

我们将所有名称扩展为的参数set,这会将位置参数设置为扩展的条目。位置参数的数量可以作为$#,因此也是该特定目录中文件的数量。

有关的:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

列出与模式匹配的文件夹中的文件名,不包括文件内容

批处理逐行列出txt文件中文件夹中的文件名

在文件名(模式)之后列出文件夹中的文件 - Linux

如何从本地文件夹插入图像,其中文件名与 CollectionViewSource 中的项目匹配

在文件夹中文件名的开头添加序号

如何根据提供的模式列出文件夹中的文件名?

文件名与文件夹内的文件不匹配

如何列出文件夹中的文件名

文件夹或文件名中的Glob模式匹配字符串

列出文件夹中的所有文件,并在每个文件名之间添加句子

计算MySQL中文件夹中的文件数

计算 BizTalk Orchestration 中文件夹中的文件数

批处理文件:列出文件名和文件夹名

递归列出具有文件名,文件夹名和权限的文件

按子文件夹列出文件数

列出 Arcpy 中文件夹内的文件?

过滤文件夹C语言中文件名的扫描目录

替换文件夹中文件名上的文本

使用bash shell映射json字符串中文件夹中的文件名

代码,用于返回文件夹中文件名的列表,并使用VBscript在每个文件的第一行返回第35至40位的文本

查找并列出文件名扩展名以包括子文件夹

rsync与文件夹和文件名模式匹配以复制文件

查找每个文件夹中的文件数

每个文件夹的最大文件数

逐个打印每个子文件夹的文件数

如何获取每个文件夹的文件数

bat文件更改文件夹中文件的日期时间,今天的日期时间从文本列表中读取文件名

为每个文件名创建文件夹并移动文件

如何将文件批量移动到与每个文件名对应的文件夹中?