Kevin Buchs wrote: > I often find myself wanting to use find, but avoid searching any > subdirectories called .snapshot, which contain our hourly online backups. > My attempt below seems to fail, for find is trying to access subdirectories > of .snapshot, for which I have no permission and I get the Permission denied > messages (many). I wonder if there is some other trick to avoiding any > traversal of .snapshot directories anywhere on the tree? > > find ! -path '*/\.snapshot/*' -iname windrv6.inf
Using -prune is a typical way. find . -name .snapshot -prune -o -iname windrv6.inf Bob Documentation on -prune from the find manual. -- Action: -prune If the file is a directory, do not descend into it. The result is true. For example, to skip the directory `src/emacs' and all files and directories under it, and print the names of the other files found: find . -wholename './src/emacs' -prune -o -print The above command will not print `./src/emacs' among its list of results. This however is not due to the effect of the `-prune' action (which only prevents further descent, it doesn't make sure we ignore that item). Instead, this effect is due to the use of `-o'. Since the left hand side of the "or" condition has succeeded for `./src/emacs', it is not necessary to evaluate the right-hand-side (`-print') at all for this particular file. If you wanted to print that directory name you could use either an extra `-print' action: find . -wholename './src/emacs' -prune -print -o -print or use the comma operator: find . -wholename './src/emacs' -prune , -print If the `-depth' option is in effect, the subdirectories will have already been visited in any case. Hence `-prune' has no effect in this case. Because `-delete' implies `-depth', using `-prune' in combination with `-delete' may well result in the deletion of more files than you intended.