我在 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)
在邮箱文件夹中有名为
000000
111111
222222
333333
so on...
我想000000
从该find
命令中排除。那可能吗?有小费吗?
谢谢。
答案1
使用 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)
GNU
find
的-newermt
选项理解与 GNUdate -d
和touch -d
.查看man find
并搜索-newerXY
详细信息。最后的
-ipath
谓词不区分大小写,因此它将匹配 *.PDF、*.pDf 等。不幸的是,在匹配 sr_pdf 目录时它也不区分大小写。例如,如果存在您不想匹配的 SR_PDF 子目录,并且您确定所有.pdf
文件扩展名均为小写,请更改-ipath
为-path
.或者,对于区分大小写的
sr_pdf
路径匹配和不区分大小写的*.pdf
文件匹配,将该-ipath
行替换为:
-path '*/sr_pdf/*' \
-iname '*.pdf' |
答案2
首先,如果您要使用这样的长路径,最好为其指定自己的变量名称。使代码更易于阅读,确保在各处使用相同的名称而不会出现拼写错误,并且在需要时更容易进行更改。
MAILBOX=/mnt/data/project_data/web_collab/mailbox
如果需要处理的 pdf 文件少于几百个,请尝试此操作:
echo "${MAILBOX}"/*/sr_pdf/*.pdf | grep -v /00000/ | grep "$today" | wc -l
如果您想要一个更通用的解决方案,请执行以下操作:
find "${MAILBOX}" -path '*/sr_pdf/*.pdf' | grep -v /00000/ | grep "$today" | wc -l