Linux find exec md5sum,只有这样的总和(fullpath TAB size TAB mtime TAB ctime TAB md5)

Linux find exec md5sum, only the sum like this (fullpath TAB size TAB mtime TAB ctime TAB md5)

我想查看 /var/www 中文件的以下数据: 完整路径大小 mtime ctime md5

我运行以下命令:

find /var/www/ -maxdepth 1 ! -type d -printf '%p\t%s\t%t\t%c\t' -exec md5sum {}  \;

这给了我: (完整路径大小 mtime ctime md5 完整路径)

/var/www/intranet/admin/tpl/view.tpl.php        1448    Wed Dec 16 18:51:06.0000000000 2015     Fri Sep 15 09:08:36.0805775786 2017     e0b7dacaf7c90fb0fbe7a69c331e36aa  /var/www/intranet/admin/tpl/view.tpl.php

如何过滤最后一个完整路径?????我不想展示它。所有字段均以 TAB 分隔。

我试过了:

find /var/www/  -maxdepth 1 ! -type d -printf '%p\t%s\t%t\t%c\t'
   -exec md5sum {} | awk '{print }'\;

为此我收到错误:"find: missing argument to `-exec'"

find /var/www/ -maxdepth 1 ! -type d -printf '%p\t%s\t%t\t%c\t' -exec md5sum {} + | awk '{print }' 

为此我只得到了 md5sum。

提前致谢!

管道 (|) 是一项 shell 功能。要获得 shell 功能,需要调用 shell:

find /var/www -maxdepth 1 ! -type d -printf '%p\t%s\t%t\t%c\t' -exec sh -c 'md5sum "" | awk '\''{print }'\' MD5 {} \;

或者,如果您更喜欢将命令分布在多行中:

find /var/www \
    -maxdepth 1 \
    ! -type d \
    -printf '%p\t%s\t%t\t%c\t' \
    -exec sh -c 'md5sum "" | awk '\''{print }'\' MD5 {} \;

备注

  1. sh -c somestring 调用 shell 并指示它执行 somestring.

  2. 中的任何命令
  3. sh -c somestring MD5 {} 调用 shell 并执行一些字符串 and[=18=] 分配给 MD5 和 </code>任何 <code>find 替代 {}.

    [=18=] 仅在 shell 创建错误消息时使用,否则不重要。

  4. 复杂的是我们的命令 somestring 必须同时包含单引号和双引号,这就是我们需要转义单引号的原因。

    在我们的例子中,我们希望 somestring 为:

    md5sum "" | awk '{print }'
    

    为了防止主 shell 替换为 </code>,我们需要将其放在单引号内。但是,我们不能将单引号放在单引号内。解决方法是将其用于我们的单引号字符串:</p> <pre><code>'md5sum "" | awk '\''{print }'\'