删除一定大小范围的文件

删除一定大小范围的文件

我想删除大小在特定值之间的文件。例如,我有以下文件列表:

-rw-r--r-- 1 smsc sys  558 Apr 30 13:07 stats.sfe.1.20120430130513.xml.Z
-rw-r--r-- 1 smsc sys  388 Apr 30 15:32 stats.sfe.1.20120430153013.xml.Z
-rw-r--r-- 1 smsc sys  386 Apr 30 15:36 stats.sfe.1.20120430153513.xml.Z
-rw-r--r-- 1 smsc sys  389 Apr 30 15:42 stats.sfe.1.20120430154013.xml.Z
-rw-r--r-- 1 smsc sys  390 Apr 30 16:02 stats.sfe.1.20120430160013.xml.Z
-rw-r--r-- 1 smsc sys  385 Apr 30 16:12 stats.sfe.1.20120430161013.xml.Z

从上面的列表中,我只想删除大小不同的文件386b390b。我知道我可以使用以下命令来删除大小超过一定值的文件<size>

find . -size +<size>-delete

但是如何为大小小于给定值的文件添加一个边界呢?

答案1

-a一个显式AND运算符,允许您连接两个原色。在本例中使用创建范围-size

find . -size +386b -a -size -390b -exec rm -f {} \;

请注意,大小是一个数字参数,可以选择在前面加上+-。从man 1 find

   Numeric arguments can be specified as

   +n     for greater than n,
   -n     for less than n,
    n      for exactly n.

答案2

每当find需要一个数字时,您可以在+其前面添加一个符号以表示大于此数字,或在其前面添加一个-符号以表示小于此数字。这些是严格的不等式:+3-7表示 4、5 或 6。

对于-sizeprimary,您需要添加后缀c以指示该数字是字节数。您可以连接多个原色以获取它们的连接(在某些版本中,您可以在它们之间放置-a-and)。因此:

find . -size +385c -size -391c -delete

在 zsh 中,您可以使用L 全局限定符。默认单位是字节;像、和 等find字符表示严格的不等式。+-

rm *(L+385-391)

(上面的命令不会递归到子目录;如果需要,请**/在模式之前添加。)

答案3

范围只是一个上限下限。来自find规格:

表达式 [-a] 表达式

初选的结合; AND 运算符由两个原色的并置隐含或通过可选的 -a 运算符明确表示。如果第一个表达式为 false,则不应计算第二个表达式。

因此,您需要做的就是在-delete操作之前指定两个大小范围。

答案4

一种使用方法perl

perl -e '
    for ( @ARGV ) { 
        if ( -s >= 386 && -s _ <= 390 ) { 
            unlink $_ or printf qq[%s\n], qq[Could not delete $_: $!] 
        } 
    }
' *

相关内容