Je souhaite supprimer les fichiers dont la taille est comprise entre certaines valeurs. Par exemple, j'ai la liste de fichiers suivante:
-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
Dans la liste ci-dessus, je souhaite supprimer uniquement les fichiers dont la taille varie entre 386b et 390b . Je sais que je peux utiliser la commande suivante pour supprimer des fichiers dont la taille dépasse certains <size>
:
find . -size +<size>-delete
Mais comment puis-je ajouter une limite de plus pour les fichiers dont la taille est inférieure à une valeur donnée?
find
les conditions sont logiquement ET par défaut, il suffit donc de virer de bord sur une autre-size
option pour l'autre borne.Réponses:
Une plage est simplement une limite supérieure ET une limite inférieure. De la
find
spécification :Il vous suffit donc de spécifier les deux limites de taille avant l'
-delete
action.la source
Le
-a
dans unAND
opérateur explicite qui vous permet de joindre deux primaires. Dans ce cas, créer une plage à l'aide de-size
.find . -size +386b -a -size -390b -exec rm -f {} \;
Notez que la taille est un argument numérique qui peut éventuellement être ajouté avec
+
et-
. Deman 1 find
:la source
find
conditions sont logiquement ET par défaut. J'ai donc ajouté unesize
condition supplémentaire et cela a bien fonctionné! La commande finale ressemble à:find . -maxdepth 1 -size +358c -size -395c -delete
Chaque fois
find
que vous attendez un nombre, vous pouvez mettre un+
signe devant lui pour signifier plus que ce nombre, ou un-
signe pour signifier moins que ce nombre. Ce sont des inégalités strictes:+3
et-7
signifie 4, 5 ou 6.Avec le
-size
primaire, vous devez ajouter le suffixec
pour indiquer que le nombre est un nombre d'octets. Vous pouvez concaténer plusieurs primaires pour prendre leur conjonction (dans certaines versions, vous pouvez les mettre-a
ou-and
entre elles). Donc:Dans zsh, vous pouvez utiliser le
L
qualificatif glob . L'unité par défaut est l'octet; commefind
, les caractères+
et-
indiquent des inégalités strictes.(La commande ci-dessus n'est pas récursive dans les sous-répertoires; si vous en avez besoin, ajoutez
**/
avant le modèle.)la source
À sens unique en utilisant
perl
:la source