使用查找时如何排除目录

Ami*_*mit 6 unix find

我正在尝试在 Unix 中使用 find 命令,并且我知道如何使用它的基础知识。例如,我有四个文件夹,A、B、C 和 D。在每个文件夹下,我有一个名为hi.dat. 要查看所有文件夹,我会这样做:

find * -name hi.dat.

伟大的!但现在,如果我做想要看的文件夹d?我可以尝试这样的事情:

find * not D/* -name hi.dat?

我不想输入:

find A/* B/* C/* -name ... 因为我显然有三个以上的文件夹,而这些只是用作示例。

谢谢!阿米特

gee*_*aur 12

那将是-prune- 但有一个小技巧:

$ find . \( -name D -prune \) -o -name hi.dat
Run Code Online (Sandbox Code Playgroud)

-prune表示“不要在此路径上进一步查看”,因此您需要另一个目录分支,而不是D. (-o意思是“或”。)还要跳过其他路径:

$ find . \( \( -name D -o -name Dminor \) -prune \) -o -name hi.dat
Run Code Online (Sandbox Code Playgroud)


Den*_*son 11

在 Bash 中:

shopt -s extglob
find !(D) -name hi.dat
Run Code Online (Sandbox Code Playgroud)

Ksh 和 zsh 的工作方式类似。

  • @Amit:是的,还有什么地方?`extglob` 选项可能已经设置。你可以通过做`shopt extglob`来检查,如果它说“开”,你就设置好了。如果没有,你可以将 `shopt -s extglob` 添加到你的 `~/.bashrc` 中,它会在你启动 Bash 时为你设置。一旦它被这些方法中的任何一个设置,你需要输入的就是“find”命令。 (4认同)