我创建了一个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
这样的字段。关于如何解决这个问题的任何想法......?
答案 0 :(得分:3)
我会使用find
:
find . -maxdepth 1 -type f -size +1k -exec gzip -k -S .bak '{}' \;
我可能不会为压缩文件使用自定义扩展名;这只是要求未来的混乱。
find
搜索目录(在本例中为.
)以查找通过过滤器的文件。可以构建复杂的过滤器;在这个相对简单的情况下,链接几个原始过滤器来选择
.
深度不超过一级的文件(即未搜索子目录),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文件。