Consider this command:
ls /mydir/*.txt | xargs chown root
The intention is to change owners of all text files in mydir to root
The issue is that if there are no .txt files in mydir then xargs thows an error saying there is no path specified. This is a harmless example because an error is being thrown, but in some cases, like in the script that i need to use here, a blank path is assumed to be the current directory. So if I run that command from /home/tom/ then if there is no result for ls /mydir/*.txt and all files under /home/tom/ have their owners changed to root.
So how can I have xargs ignore an empty result?
For GNU
xargs, you can use the-ror--no-run-if-emptyoption:The BSD version of
xargs, which is used on macOS, does not run the command for an empty input, so the-roption is not needed (nor is it accepted by that version ofxargs).