Quiero eliminar archivos cuyo tamaño está entre ciertos valores. Por ejemplo, tengo la siguiente lista de archivos:
-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
De la lista anterior, quiero eliminar solo los archivos cuyo tamaño varía entre 386b y 390b . Sé que puedo usar el siguiente comando para eliminar archivos cuyo tamaño excede cierto <size>
:
find . -size +<size>-delete
Pero, ¿cómo puedo agregar un límite más para archivos cuyo tamaño es menor que un valor dado?
find
las condiciones son lógicamente AND 'por defecto, así que simplemente agregue otra-size
opción para el otro límite.Respuestas:
Un rango es simplemente un límite superior Y un límite inferior. De la
find
especificación :Entonces, todo lo que necesita hacer es especificar ambos límites de tamaño antes de la
-delete
acción.fuente
El
-a
en unAND
operador explícito que le permite unir dos primarias. En este caso, crear un rango usando-size
.find . -size +386b -a -size -390b -exec rm -f {} \;
Tenga en cuenta que el tamaño es un argumento numérico que opcionalmente puede anteponerse con
+
y-
. Deman 1 find
:fuente
find
condiciones son lógicamente AND'd por defecto. ¡Así que acabo de agregar unasize
condición más y funcionó bien! El comando final se ve así:find . -maxdepth 1 -size +358c -size -395c -delete
Siempre que
find
espere un número, puede poner un+
signo antes de que signifique más que este número, o un-
signo que signifique menos que este número. Estas son desigualdades estrictas:+3
y-7
significa 4, 5 o 6.Con el
-size
primario, debe agregar el sufijoc
para indicar que el número es un número de bytes. Puede concatenar varias primarias para tomar su conjunción (en algunas versiones, puede ponerlas-a
o-and
entre ellas). Así:En zsh, puede usar el
L
calificador glob . La unidad predeterminada es bytes; comofind
, los caracteres+
e-
indican estrictas desigualdades.(El comando anterior no se repite en subdirectorios; si lo necesita, agregue
**/
antes del patrón).fuente
Una forma de usar
perl
:fuente