Tar – Avoid Archiving Files Larger Than Certain Size

archivebackuptar

I want to archive files (with tar) which are below 3 MB in size. But I also want to retain the directories in which those files exist. (so I cannot use find command). I just want to avoid the files which are above 3 MB in size. How can this be done?

Best Answer

Simpler than you think:

$ tar cf small-archive.tar /big/tree --exclude-from <(find /big/tree -size +3M)

On a semi-related note (relating to your statement that you can't use find) to get a listing of all files (including directories) under a path minus files larger than 3MiB, use:

$ find . -size -3M -o -type d

You could then do:

$ tar cf small-archive.tar --no-recursion --files-from <(find /big/tree -size -3M -o -type d)

But I'd prefer the first one as it's simpler, clearly expresses what you want and will lead to less surprises.