---
title: "find, xargs, sleep"
date: 2018-11-06T13:59:46+01:00
categories:
  - "SysOps"
lang: de
canonical: https://www.marcusjaschen.de/blog/2018/find-xargs-sleep/
---

# find, xargs, sleep



<h2>Gegeben</h2>
<ul>
 	<li>Linux-Server</li>
 	<li>RAID-1 aus zwei SATA-Platten (spinning rust)</li>
 	<li>ext4 Filesystem</li>
 	<li>ein Directory-Tree mit vielen Millionen Files + Sub-Directories</li>
</ul>
<h2>Aufgabe</h2>
In diesem Tree rekursiv leere Sub-Directories finden und diese löschen.
<h2>Bonusaufgabe</h2>
Das Ganze soll auf einem Produktionsserver laufen, die I/O muss niedrig gehalten werden, um die eigentlichen Aufgaben des Servers nicht zu beeinträchtigen.
<h2>Hinweis</h2>
Es handelt sich um etwa 1 Million leere Directories, welche zum Schluss gelöscht werden müssen.
<h2>Ansatz 1</h2>

find + xargs

<pre>find . -type d -empty -print0 | xargs -0 rmdir -v</pre>

Löst die Aufgabe, allerdings geht die Average Queue Depth für die Platten hier nach kürzester Zeit durch die Decke und die Maschine kann mit ihrem Storage nicht mehr viel anfangen. Die Bonusaufgabe wird damit zumindest nicht bestanden.

<h2>Ansatz 2</h2>

find + xargs + sleep: 

Nach dem Löschen von <em>n</em>&nbsp;Directories kurz warten, damit die Platten genügend Zeit haben, um ihre Aufgaben abzuarbeiten.

<pre>find . -type d -empty -print0 | \
xargs -0 -n 100 bash -c '{ rmdir "$@" ; sleep 3 ; }'</pre>

Löst Aufgabe + Bonus zufriedenstellend und reicht mir für die einmalige Anwendung.
