Thanks for your answers, but I still have a question about this. So, if I understand correctly, -print0 is considered as just another test (just like -iname) that is evaluated for each file according to operator precedence. In this case, since -print0 always returns true, shouldn't the following commands be equivalent: find . -type f -and -print0 -and \( -iname '*.html' -or -iname '*.js' \) | xargs -0 and find . -type f -and \( -iname '*.html' -or -iname '*.js' \) -and -print0 | xargs -0 The first one outputs: ./a.js ./a.css ./a.html The second one outputs: ./a.js ./a.html Thanks, Razvan RACASANU