查找排除多个目录 - z/OS USS Region

查找排除多个目录 - z/OS USS Region

在 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

相关内容