Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果文件大小大于1kb,则Bash_Bash - Fatal编程技术网

如果文件大小大于1kb,则Bash

如果文件大小大于1kb,则Bash,bash,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 acti

我已经创建了一个
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];做点什么。有没有关于我应该如何处理这个问题的想法…?

我会使用
查找

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/ \;

然后,只有当返回的
gzip-k-S.bak文件名的退出状态为
0
(即,如果它指示成功完成)时,才会执行
cp filename.bak/some/where/else/

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/ \;
然后,只有当返回退出状态为
0
gzip-k-S.bak filename
时,才会执行
cp filename.bak/some/where/else/
(即,如果它指示成功完成)

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

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