I currently have this script:

find . -name '*.log' -print0 | xargs -0 tar zcf $file

To collect all the "*.log" files. I would like to modify it to include also all the ".txt" files but I don't know how, this should be fairly simple right?

2 Answers 2


There are a number of ways to change your find command. Here is one:

find . \( -name '*.log' -o -name '*.txt' \) -print0

The -o is an OR operator, thus if the first condition fails, the second condition is checked. If you have GNU find, you can also use the aptly named -or. Note that the second expression is not evaluated if the first holds.

  • What does the -o does?
    – OscarRyz
    Jan 4, 2011 at 21:42
  • @OscarRyz: See my update.
    – Steven D
    Jan 4, 2011 at 21:50
  • I'm only getting the .txt files. :( Thanks anyway +1
    – OscarRyz
    Jan 4, 2011 at 21:54
  • Oh, this is better than mine; I didn't know about -o. @OscarRyz It works for me, I get both Jan 4, 2011 at 21:55
  • 1
    Yeap, that worked, I have +1'ed but to be fair, I'll leave Michael answer as accepted for I have already sent the .tar.gz file via email long ago :) :)
    – OscarRyz
    Jan 4, 2011 at 22:17

If you use the -regex flag instead of -name you can specify the name as a regular expression:

find . -regex '.*\.\(log\|txt\)' -print0 | xargs -0 tar zcf $file

You must log in to answer this question.

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