shell脚本用于查找目录及其子目录中的唯一文件数?

时间:2015-03-24 11:02:26

标签: unix

我正在尝试查找目录中的唯一文件数以及它的子目录这可能吗?

比如说有一个包含100个文件的目录。我如何计算该目录下的唯一文件数?

1 个答案:

答案 0 :(得分:1)

假设您询问文件名,可以

  1. 首先,列出目录树中的所有文件
  2. 其次,从列表中获取唯一值
  3. 要列出所有文件,您可以使用find。通常find打印每个结果的完整路径名,但由于您只想比较基本​​文件名,因此您必须自定义其输出:

    find directoryName -type f -printf '%f\n'
    

    这将打印每个基本文件名,每行一个。现在,您只能通过排序获取唯一的文件名,然后将共享名称的所有相邻条目折叠到单个条目中。带有sort开关的-u命令会为您执行此操作:

    find directoryName -type f -printf '%f\n' | sort -u
    

    如果您想获得每个唯一文件名的重复次数,那么只需使用sort并使用uniq -c来处理折叠和计数:

    find directoryName -type f -printf '%f\n' | sort | uniq -c
    

    请注意,上述解决方案会因包含换行符(\n)字符的文件名而混淆。如果你有任何这样的文件名,你应该在find手册中阅读关于空终止(而不是换行 - 终止)你的输出。

    最后,如果您只是在寻找一个数字输出,请通过“wc -l”管理整个事件来计算它。

    find directoryName -type f -printf '%f\n' | sort | uniq -c | wc -l