在linux上的文档树中recursion地存档小文件?

给定一个基本目录(如/home/user )是否有一个可以运行的命令可以创build一个档案备份所有的文件(即小于100kb的文件)在该目录中,它的孩子? 我知道你可以tar / gz一个目录 – 但是排除文件呢?

这个想法是,大多数照片,video和其他大文件将被忽略,而在项目和服务器周围移动时,所有重要的手工input的文档都可以很容易地进行备份。

UPDATE

使用skinp的真棒代码,我能够备份less量的文件。 但是,正如DerfK指出的那样 – 可以传递给命令的参数的大小是有限制的。 考虑到这一点,我能够写出发现的内容希望我可以用一些东西来读取内容来tar和绕过这个限制。 另一个选项似乎是一个sh脚本,可以将每个文件一次加到档案中。

 find /home/username -type f -size -100k > list.of.small.files.txt 

其中呈现出一个6MB的文件。

看看到目前为止发布在这里的其他答案,我担心的是我看到的xargsfind -exec {}的用法是错误的。 如果当文件列表增长足够长的时间, tar -cxargs多次执行,填充到该点的tar文件将被覆盖。 因此,只有最后一次调用tar的文件才会在tar文件中结束。

无论文件的总数是多less,无论文件名是否包含embedded的换行符,这都是应该始终起作用的一行代码:

 find /home/user -type f -size -100k -print0 | tar -c -z --null --files-from=- -f backup.tgz 

find命令生成一个以空终止文件名进行备份的列表, tar命令从pipe道读取该列表并创buildtarfile backup.tgz

尝试

 find /home/user -type f -size -100k -print0 | xargs -0 tar cvzf tarfile.tar.gz 

这对于名称中包含空格的文件也是安全的。

我会用find的力量:

 find /home/user -type f -size -100k -exec tar cvzf backup.tgz {} \+ 

键入:指定您想要的文件不是目录
大小:以数字前面的 – 表示我们想要小于100k
exec:用{}作为find的文件执行tar,\ +表示exec的结尾

你也可以使用xargs:

 find /home/user -type f -size -100k | xargs tar cvzf backup.tgz 

更新:

tar作为命令将文件附加到现有的tar档案(可能甚至不存在,它适用于我)。

以下是一个简单的脚本示例:

 find . -type f -size -100k -print > filelist for i in `cat filelist` do tar --append $i --file=backup.tar done gzip backup.tar 

很显然,这个脚本是非常不合适的……它只能一次追加一个文件,只要有文件就可以启动tar命令。
这是一个很好的方式,它附加说每1000通过1000个文件…