【发布时间】:2015-03-03 22:56:26
【问题描述】:
我想知道如何指定命令find在当前目录下搜索文件但跳过一些特定的子目录。
例如,我想跳过匹配./dir1/*.1/ 的子目录。
如果我想排除与 ./dir1/train*.1/、./dir2/train*.3/、./dir1/dir3/train*.2/... 匹配的子目录,我该如何指定所有这些子目录?我试过-path '\*/train*.*' -prune,但它不起作用。
【问题讨论】:
我想知道如何指定命令find在当前目录下搜索文件但跳过一些特定的子目录。
例如,我想跳过匹配./dir1/*.1/ 的子目录。
如果我想排除与 ./dir1/train*.1/、./dir2/train*.3/、./dir1/dir3/train*.2/... 匹配的子目录,我该如何指定所有这些子目录?我试过-path '\*/train*.*' -prune,但它不起作用。
【问题讨论】:
您需要使用-path 选项和-prune 选项,如下所示:
find . -type d -path "./dir1/*.1" -prune -o -print
【讨论】:
train*.[0-9] 匹配的每个目录,那么您可以使用:-type d -name "train*.[0-9]" -prune"
-print 表示“打印当前文件名”,-o 表示“或”(在布尔短路意义上)。事实证明,如果事情足够简单,-print 实际上是默认行为,但是您所追求的超出了此范围,因此您需要明确地编写它。是的,您可以将复杂的内容与多个-o 选项链接在一起; 'find' 是一个聪明的电动工具。
-print?一个早期的菜鸟错误是忽略它并想知道为什么你没有得到任何东西。如果没有其他任何“活动”完成,GNU find 是第一个打印的(IIRC)。
检查this。 编辑:直接来自手册页:`要忽略目录及其下的文件,请使用 -prune'。
【讨论】: