【问题标题】:"find" files under current directory but skipping some specific sub-directories在当前目录下“查找”文件但跳过一些特定的子目录
【发布时间】:2015-03-03 22:56:26
【问题描述】:

我想知道如何指定命令find在当前目录下搜索文件但跳过一些特定的子目录。

例如,我想跳过匹配./dir1/*.1/ 的子目录。

如果我想排除与 ./dir1/train*.1/./dir2/train*.3/./dir1/dir3/train*.2/... 匹配的子目录,我该如何指定所有这些子目录?我试过-path '\*/train*.*' -prune,但它不起作用。

【问题讨论】:

    标签: bash find


    【解决方案1】:

    您需要使用-path 选项和-prune 选项,如下所示:

    find . -type d -path "./dir1/*.1" -prune -o -print
    

    【讨论】:

    • 感谢您的帮助!它与 -prune 一起使用。如果我想排除匹配“./dir1/train*.1/”、“./dir2/train*.3/”、“./dir1/dir3/train*.2/”、...的子目录,我怎样才能指定所有这些?我试过“-path '/train.*' -prune”,但它不起作用。再次感谢!
    • @Tim:如果您想排除名称与train*.[0-9] 匹配的每个目录,那么您可以使用:-type d -name "train*.[0-9]" -prune"
    • 谢谢多纳尔!那么 -prune 之前指定的路径将被排除在外吗? -o 和 -print 在这里是什么意思?我发现如果我需要搜索一些文件名但不在某个目录下的文件,我必须将文件名放在 -o 和 -print 之间。再次感谢!
    • @Tim:它们是基本的查找功能:-print 表示“打印当前文件名”,-o 表示“或”(在布尔短路意义上)。事实证明,如果事情足够简单,-print 实际上是默认行为,但是您所追求的超出了此范围,因此您需要明确地编写它。是的,您可以将复杂的内容与多个-o 选项链接在一起; 'find' 是一个聪明的电动工具。
    • 顺便说一句,您知道最初“查找”没有打印任何内容,除非您在某处包含-print?一个早期的菜鸟错误是忽略它并想知道为什么你没有得到任何东西。如果没有其他任何“活动”完成,GNU find 是第一个打印的(IIRC)。
    【解决方案2】:

    检查this。 编辑:直接来自手册页:`要忽略目录及其下的文件,请使用 -prune'。

    【讨论】:

    • 感谢您的帮助!它适用于 -prune。如果我想排除匹配“./dir1/train*.1/”、“./dir2/train*.3/”、“./dir1/dir3/train*.2/”、...的子目录,我怎样才能指定所有这些?我试过“-path '/train.*' -prune”,但它不起作用。再次感谢!
    猜你喜欢
    • 2022-07-21
    • 2017-01-07
    • 2020-05-19
    • 2011-07-05
    • 1970-01-01
    • 2021-05-15
    相关资源
    最近更新 更多