我有一组这样的目录:
/level1/user01/dir01
/level1/user01/dir02
/level1/user01/dir03
/level1/user01/dir04
/level1/user02/dir01
/level1/user02/dir02
/level1/user02/dir03
/level1/user02/dir04
/level1/user03/dir01
/level1/user03/dir02
/level1/user03/dir03
/level1/user03/dir04
我想用find在每个用户的dir02目录下搜索扩展名为.oz的文件
我可以用
find /level1/ -name "*.oz"
但我只想只在目录 dir02 内搜索
这不起作用
find /level1/"[a-z][0-9]"/dir02 -name "*.oz"
答案1
如果您想在第一个参数中指定多个目录,那么这仅取决于您的 shell。因此,在 bash 和 zsh 以及类似的(csh 和 tcsh?)中,您只需使用 shell glob。 shell 将此 glob 扩展为您感兴趣的多个目录,并将它们提供给find
,它可以采用多个参数。
find /level1/*/dir02 -name "*.oz"
几点补充:
- 这里的语法是 glob,而不是正则表达式。
- 无论如何,你的正则表达式是错误的。 (忽略引用)应该是
/level1/[a-z]*[0-9]*/dir02
。注意*
s。 - 另一种选择是
-path
, seeman find
,但这比仅使用 shell glob 更复杂。
答案2
find
使用with 的替代解决方案-path
:
$ find /level1 -type f -path "/level1/user??/dir02/*.oz" -print
这将打印(完整)路径匹配的所有常规文件的路径/level1/user??/dir02/*.oz
。
如果您知道这些文件位于该dir02
目录中(而不是其子目录中),那么这将列出它们:
printf '%s\n' /level1/user??/dir02/*.oz