使用 find 从通配符 (*) 中排除

Edm*_*har 2 bash find

我在 bashscript 中有一个命令,它将从通配符文件夹名称中查找文件并从该通配符文件夹中计算它我们有一个我想从计数中排除的测试文件夹。

这是我的命令

echo $(date "+%b %_d")
echo "$today"
sr_today=$(find /mnt/data/project_data/web_collab/mailbox/*/sr_pdf/*.pdf -type f -ls | grep "$today" | wc -l)
Run Code Online (Sandbox Code Playgroud)

在邮箱文件夹中有名为的文件夹
000000
111111
222222
333333
so on...

我想000000从该find命令中排除。那可能吗?有小费吗?

谢谢。

cas*_*cas 5

使用 GNU find

#!/bin/sh

dir='/mnt/data/project_data/web_collab/mailbox/'

sr_today=$(find "$dir" \
             ! -path '*/000000/*' \
             -newermt '12am today' \
             -ipath '*/sr_pdf/*.pdf' |
           wc -l)
Run Code Online (Sandbox Code Playgroud)
  • GNUfind-newermt选项与 GNUdate -dtouch -d. 查看man find和搜索-newerXY详细信息。

  • 最终-ipath谓词不区分大小写,因此它将匹配 *.PDF、*.pDf 等。不幸的是,它在匹配 sr_pdf 目录时也不区分大小写。如果有,例如,您不想匹配的 SR_PDF 子目录,并且您确定所有.pdf文件扩展名都是小写,请更改-ipath-path.

    或者,对于区分大小写的sr_pdf路径匹配和不区分大小写的*.pdf文件匹配,将该-ipath行替换为:

      -path '*/sr_pdf/*' \
      -iname '*.pdf' | 
Run Code Online (Sandbox Code Playgroud)