I'm trying to archive files with tar and ignoring files larger than 100MB. Is that possible?
PS: Not have to use tar.
Asked
Active
Viewed 3,668 times
8

Alvar
- 17,058

Faruk Uzun
- 1,280
2 Answers
9
Yeah there are probably a few more ways of doing this but you're probably best off with find
as it's so tunable.
find /path/to/dir -size -100M | xargs tar cvf archive.tar
or
tar cvf archive.tar $(find /path/to/dir -size -100M)
If there are other directories in the current folder which you do not want to archive, then use:
find /path/to/dir -maxdepth 1 -size -100M | xargs tar cvf archive.tar
Per the comments below, spaces can throw out some errors but in my testing they still seemed to get added to the archive when using the first method (a little strange in itself) but if you're worried, you can fix the find command to replace spaces with escaped versions.
As ever, there are a billion ways of doing this.
find /path/ -size -100M | sed 's/ /\\ /g' | xargs tar cvf archive.tar
find /path/ -size -100M -exec echo '"{}"' \; | xargs tar cvf archive.tar

Oli
- 293,335
0
Just exclude the big files like this:
tar cf archive.tar /path/to/archive --exclude-from <(find /path/to/archive -size +100M)

eshwar
- 808
-print0
in the find command as well as--null
for the tar command to cope with this scenario. – fossfreedom Feb 21 '12 at 13:12tar cvf myfile.tar
command fails. I strongly suggest use totar rvf myfile.tar
command. – Faruk Uzun Feb 21 '12 at 16:21-size -1k
doesn't work as expected, and might select only files that have a size of 0. You might need to use! -size +1k
. (Same for1M
,1G
, etc.) – Michele Piccolini Aug 31 '21 at 13:26xargs
, make sure to add-d '\n'
orxargs
will break iffind
finds files with whitespaces in their names. See https://stackoverflow.com/questions/16758525/make-xargs-handle-filenames-that-contain-spaces – Michele Piccolini Aug 31 '21 at 13:51