gpt4 book ai didi

linux - 对所有目录进行文件类型统计

转载 作者:可可西里 更新时间:2023-11-01 11:49:48 25 4
gpt4 key购买 nike

我有一个 bash 脚本,可以递归地计算过去 45 天内编辑过的所有目录中的文件数

 find . -type f -mtime -45| rev | cut -d . -f1 | rev | sort | uniq -ic | sort -rn

我有一个名为

的目录
\parent

在 parent 中我有:

\parent\a
\parent\b
\parent\c

我将在文件夹 a 上运行一次上述脚本,在 b 上运行一次,在 c 上运行一次。

当前输出为:

     91 xls
85 xlsx
49 doc
46 db
31 docx
24 jpg
22 pub
10 pdf
4 msg
2 xml
2 txt
1 zip
1 thmx
1 htm
1 /ic

我想在 \parent 中的所有文件夹上从 \parent 运行脚本并获得如下输出:

+-------+------+--------+
| count | ext | folder |
+-------+------+--------+
| 91 | xls | a |
| 85 | xlsx | a |
| 49 | doc | a |
| 46 | db | a |
| 31 | docx | a |
| 24 | jpg | a |
| 22 | pub | a |
| 10 | pdf | a |
| 4 | msg | a |
| 98 | jpg | b |
| 92 | pub | b |
| 62 | pdf | b |
| 2 | xml | b |
| 2 | txt | b |
| 1 | zip | b |
| 1 | thmx | b |
| 1 | htm | b |
| 1 | /ic | b |
| 66 | txt | c |
| 48 | msg | c |
| 44 | xml | c |
| 30 | zip | c |
| 12 | doc | c |
| 6 | db | c |
| 6 | docx | c |
| 3 | jpg | c |
+-------+------+--------+

如何使用 bash 完成此操作?

最佳答案

将其放入脚本中,使其可执行:chmod +x script.sh 并运行:./script.sh

#!/bin/sh

find . -type f -mtime -45 2>/dev/null \
| sed 's|^\./\([^/]*\)/|\1/|; s|/.*/|/|; s|/.*.\.| |p; d' \
| sort | uniq -ic \
| sort -b -k2,2 -k1,1rn \
| awk '
BEGIN{
sep = "+-------+------+--------+"
print sep "\n| count | ext | folder |\n" sep
}

{ printf("| %5d | %-4s | %-6s |\n", $1, $3, $2) }

END{ print sep }'
  • sed 's|^\./\([^/]*\)/|\1/|; s|/.*/|/|; s|/.*.\.| |p; d'

    1. s|^\./\([^/]*\)/.*/|\1 |./a/file.xls 替换为 a/file.xls.
    2. s|/.*/|/|b/some/dir/file.mp3 替换为 b/file.mp3
    3. s|/.*.\.| |pa file.xls 替换为 a xls,如果 s///p 成功,那么它也会打印为标准out,(以避免没有扩展名的文件)。
    4. d 删除该行(以避免打印匹配(再次)或不匹配的行)。
  • 排序 | uniq -ic 统计每组扩展名和目录名。

  • sort -b -k2,2 -k1,1rn 首先按目录(字段 2)排序,小 -> 大,然后按倒序按计数(字段 1)排序 (大 ->小)和数字。 -b 使 sort(1) 忽略空格(空格/制表符)。

  • awk 的最后一部分漂亮地打印了输出,也许您想将其放入单独的脚本中。

如果您想查看每个管道如何过滤结果,只需尝试删除每个管道,您将看到输出。

在这里你可以找到关于 sh/awk/sed 等的很好的教程。

http://www.grymoire.com/Unix/

关于linux - 对所有目录进行文件类型统计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14634459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com