Eu quero excluir arquivos cujo tamanho está entre certos valores. Por exemplo, tenho a seguinte lista de arquivos:
-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
Na lista acima, desejo excluir apenas os arquivos cujo tamanho varia entre 386b e 390b . Eu sei que posso usar o seguinte comando para excluir arquivos cujo tamanho excede certos <size>
:
find . -size +<size>-delete
Mas como posso adicionar mais um limite para arquivos cujo tamanho é menor que um determinado valor?
find
as condições são logicamente AND 'por padrão, portanto, basta escolher outra-size
opção para o outro limite.Respostas:
Um intervalo é simplesmente um limite superior E um limite inferior. Das
find
especificações :Portanto, tudo que você precisa fazer é especificar os dois limites de tamanho antes da
-delete
ação.fonte
O operador
-a
explícitoAND
que permite combinar duas primárias. Nesse caso, criando um intervalo usando-size
.find . -size +386b -a -size -390b -exec rm -f {} \;
Observe que o tamanho é um argumento numérico que pode opcionalmente ser anexado com
+
e-
. Deman 1 find
:fonte
find
condições são AND logicamente por padrão. Acabei de adicionar mais umasize
condição e funcionou bem! O comando final se parece com:find . -maxdepth 1 -size +358c -size -395c -delete
Sempre que
find
espera um número, você pode colocar um+
sinal antes que ele signifique mais que esse número ou um-
sinal que signifique menos que esse número. São desigualdades estritas:+3
e-7
significa 4, 5 ou 6.Com o
-size
primário, você precisa adicionar o sufixoc
para indicar que o número é um número de bytes. Você pode concatenar várias primárias para fazer a conjunção (em algumas versões, é possível colocar-a
ou-and
entre elas). Portanto:No zsh, você pode usar o
L
qualificador glob . A unidade padrão é bytes; comofind
, os caracteres+
e-
indicam desigualdades estritas.(O comando acima não recursa em subdiretórios; se você precisar, adicione
**/
antes do padrão.)fonte
Uma maneira de usar
perl
:fonte