4

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

Rui F Ribeiro
  • 56,709
  • 26
  • 150
  • 232
Martin Vegter
  • 358
  • 75
  • 236
  • 411

2 Answers2

7

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.

slm
  • 369,824
0

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".

BitsOfNix
  • 5,117