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?

findlas condiciones son lógicamente AND 'por defecto, así que simplemente agregue otra-sizeopción para el otro límite.Respuestas:
Un rango es simplemente un límite superior Y un límite inferior. De la
findespecificación :Entonces, todo lo que necesita hacer es especificar ambos límites de tamaño antes de la
-deleteacción.fuente
El
-aen unANDoperador 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
findcondiciones son lógicamente AND'd por defecto. ¡Así que acabo de agregar unasizecondición más y funcionó bien! El comando final se ve así:find . -maxdepth 1 -size +358c -size -395c -deleteSiempre que
findespere 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:+3y-7significa 4, 5 o 6.Con el
-sizeprimario, debe agregar el sufijocpara 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-ao-andentre ellas). Así:En zsh, puede usar el
Lcalificador 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