I have a directory /srv/tftp/pxelinux.cfg and a file /etc/mtab. I want to exclude both from find. But whatever I do, either one always is not excluded

find /etc /srv -path /srv/tftp/pxelinux.cfg -prune -o \! -path /etc/mtab
find /etc /srv \( -path /srv/tftp/pxelinux.cfg -prune -o -print \) -a \( \! -path /etc/mtab \)

Note: I find the -path /foo -prune -o -print syntax highly confusing and unintuitive

2 Answers 2


Try this variant:

$ find /etc /srv \( -path /srv/tftp/pxelinux.cfg -o -path /etc/mtab \) \
    -prune -o -print

This will "prune" either of those 2 -path arguments from the list, and print everything else.


This works for me:

find . \! -path "./.git*" -a \! -name states_to_csv.pl

so converting to your should be something like

find /etc /srv \! -path "./srv/tftp/pxelinux.cfg*" -a \! -name /etc/mtab

The -a flag stand for "and".

You must log in to answer this question.

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