Bash如果文件大小大于1kb

时间:2015-04-26 22:25:16

标签: bash

我创建了一个vi文件,我想查看主目录中的文件以查看其大小。如果常规文件的大小大于1kb,我想将其备份为扩展名为.bak的压缩文件。我已经开始使用命令du -h --max-depth=0 * | sort -r列出文件,如...

10K archive.tar
1.0K activity48
1.0K activity47
1.0K activity46
1.0K activity45
1.0k activity44
1.0K activity43
1.0K activity42
1.0K activity41
1.0K activity40
1.0K activity39
1.0K activity38

这些是列出的一些文件,但我的想法是我需要剪切字段1并以某种方式创建一个if语句并比较像if [ $x -ge 1.0 ] ; do这样的字段。关于如何解决这个问题的任何想法......?

2 个答案:

答案 0 :(得分:3)

我会使用find

find . -maxdepth 1 -type f -size +1k -exec gzip -k -S .bak '{}' \;

我可能不会为压缩文件使用自定义扩展名;这只是要求未来的混乱。

find搜索目录(在本例中为.)以查找通过过滤器的文件。可以构建复杂的过滤器;在这个相对简单的情况下,链接几个原始过滤器来选择

  • .深度不超过一级的文件(即未搜索子目录),
  • 是常规文件,
  • 1KB或更大,
  • gzip -k S .bak filename退出,状态代码为0

-exec过滤器的特殊之处在于它被视为一项操作(其他操作包括-delete-print)。如果过滤器不包含操作,则会将过隐式-print操作附加到过滤器,以便打印适合过滤器的所有文件的名称。由于我们的过滤器包含一个动作,因此不会发生。

在任何情况下,我们对这种情况下-exec过滤器的结果并不感兴趣,只是在运行指定命令的副作用中。知道-exec也是一个过滤器很有用,但是,如果你想链接命令。例如,如果您想在打包后将备份文件复制到另一个文件夹,则可以编写

find . -maxdepth 1 -type f -size +1k -exec gzip -k -S .bak '{}' \; -exec cp '{}.bak' /some/where/else/ \;

然后cp filename.bak /some/where/else/只有在退出状态为gzip -k -S .bak filename的情况下返回0时才会执行(即,如果它表示成功完成)。

答案 1 :(得分:3)

find . -maxdepth 1 -type f -size +1k -exec gzip {} \;

应该这样做。那么它会生成压缩的.gz文件。