3

Im not sure what im doing wrong on this. I've read through a bunch of posts and websites but am still having issues.

I need to check a system for files that have changed in the past day but I need to skip certain mounted folders since they are mounted to drives with tons of TBs.

Here is the setup: I have few drives mounted to folders inside of /usr/local/connect/ /usr/local/connect/logs --> mounts to an NFS /usr/local/connect/DR01 --> mounts to a DR share a few more like this...

I want to run a normal find command (or any command that would work for this) that excludes those directories. Here are somethings i've tried that haven't seemed to work.

find . ! -path "/usr/local/connect/" -type f -name "*.txt" -mtime -1

find . -type f -path "/usr/local/connect/" -prune -o -name "*.txt" -mtime -1

Neither of those seem to work. I've tried to do it in different orders (like -type f first, or prune first in line, etc.) as well. But I read prune removes the proceeding path. This seems like it should be an easy thing to do. Let me know if you see my mistake! Thanks in advance!

1 Answer 1

4

-path "/usr/local/connect/" would match only on a file path that is exactly /usr/local/connect/. That will never match because with find ., all the paths will start with .

So you'd want:

find / -path '/usr/local/connect/*' -type d -prune -o \
       -name '*.txt' -type f -mtime -1 -print

The -print is also important. Without it, there would be an implicit -print for files that match the whole expression (so both parts of the -o).

Note that you can also use -xdev to prevent crossing any file system boundary.

If you want to run it with find . when the current directory is /usr/local, that would have to be:

cd /usr/local &&
  find . -path './connect/*' -type d -prune -o \
         -name '*.txt' -type f -mtime -1 -print
1
  • Oh man -- thanks! All of that helped out so much. Totally forgot about xdev. Why do I have to use the \ at the end of the first line? Is it not possible to use it all on the same line? I have to do it as one command and hit enter and go to the next line and then enter in the new settings? I need to look in to exactly what the -o is. Super helpful! Thank you!
    – saleetzo
    Commented May 16, 2017 at 23:11

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .