删除特定大小范围的文件

Eug*_*e S 12 size bash find

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

-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
Run Code Online (Sandbox Code Playgroud)

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

find . -size +<size>-delete
Run Code Online (Sandbox Code Playgroud)

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

Geo*_*e M 8

-a在显式AND操作,让您合相2个初选。在这种情况下,使用-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.
Run Code Online (Sandbox Code Playgroud)


Gil*_*il' 8

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

有了-sizeprimary,就需要加上后缀c,表示数字是字节数。您可以连接多个原色以获取它们的连接(在某些版本中,您可以将它们放在它们之间-a或放在-and它们之间)。因此:

find . -size +385c -size -391c -delete
Run Code Online (Sandbox Code Playgroud)

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

rm *(L+385-391)
Run Code Online (Sandbox Code Playgroud)

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


jw0*_*013 7

范围只是一个上限一个下限。从find规范

表达式 [-a] 表达式

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

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