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?


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

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 '11 at 21:42
  • @OscarRyz: See my update. – Steven D Jan 4 '11 at 21:50
  • I'm only getting the .txt files. :( Thanks anyway +1 – OscarRyz Jan 4 '11 at 21:54
  • Oh, this is better than mine; I didn't know about -o. @OscarRyz It works for me, I get both – Michael Mrozek Jan 4 '11 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 '11 at 22:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.