我想删除大小介于特定值之间的文件。例如,我有以下文件列表:
-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)
从上面的列表中,我只想删除大小在386b和390b之间变化的文件。我知道我可以使用以下命令来删除超过一定大小的文件<size>
:
find . -size +<size>-delete
Run Code Online (Sandbox Code Playgroud)
但是如何为大小小于给定值的文件再添加一个边界?
将-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)
每当find
需要一个数字时,您可以+
在它前面放一个符号表示大于这个数字,或者一个-
符号表示小于这个数字。这些是严格的不等式:+3
and-7
表示 4、5 或 6。
有了-size
primary,就需要加上后缀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)
(上面的命令不会递归到子目录中;如果需要,请**/
在模式之前添加。)