在 z/OS(大型机版本 2.1)Unix 系统服务区域上,我尝试执行一个涉及 find 的命令,如下所示:
假设我有以下目录结构:
/tmp
/dir1-include
/dir2-exclude
/dir3-include
/dir4-exclude
dir1-include
我正在尝试计算和中超过 90 天的所有文件的计数dir3-include
。以下命令似乎不起作用:
find /tmp/ \( -path /dir2-exclude -prune -o \
-path /dir4-exclude -prune \
\) \
-o -type f -mtime +90 | wc -l
它给了我:
FSUM6372 Unknown option "-path"
Usage: find directory ... expression`
答案1
有很多方法可以做到这一点。以下所有选项都适用于 z/OS。
如果您find
不支持-path
,并且由于您假设没有文件名将包含换行符(通过管道传输到wc
),您可以使用以下方法解决它grep
:
find /tmp/ -type f -mtime +90 | grep -v /tmp/dir2-exclude | grep -v /tmp/dir4-exclude | wc -l
如果您排除的目录共享一个模式(不排除您想要保留的任何内容),您可以将其简化为:
find /tmp ... | grep -cv '/tmp/dir.*-exclude'
...再次理解,如果目录或文件名中包含换行符,这将错误地计算 find 的输出。
如果您find
支持多个起始路径,并且您想要包含的路径共享一个模式,您可以通过这种方式解决它:
find /tmp/dir*-include -type f -mtime +90 | wc -l
此外,-prune 选项不会下降到上述目录之下。
find /tmp/ -type d -name "/dir2-exclude" -prune -o -type d -name "/dir4-exclude" -prune -o -type f -mtime +90 | wc -l