Als Teil eines Bereitstellungsskripts möchte ich einige zwischengespeicherte Inhalte aus meinem temporären Verzeichnis sichern. Ich benutze einen Befehl wie:
rm /tmp/our_cache/*
Wenn /tmp/our_cache
jedoch leer ist (ziemlich häufig, wenn viele Änderungen schnell hintereinander auf unseren Testserver übertragen werden), wird die folgende Fehlermeldung ausgegeben:
rm: cannot remove `/tmp/our_cache/*': No such file or directory
Es ist keine große Sache, aber es ist ein wenig hässlich und ich möchte das Rausch-zu-Signal-Verhältnis in der Ausgabe dieses Skripts verringern.
Was ist eine prägnante Möglichkeit in Unix, den Inhalt eines Verzeichnisses zu löschen, ohne dass Meldungen angezeigt werden, dass das Verzeichnis bereits leer ist?
Bearbeiten 1
entfernter "-Typ f
Bearbeiten 2
Nicht-Standard-Option hinzugefügt,
-mindepth 1
um zu verhindern, dass das Such-Stammverzeichnis entfernt wird (nachdem die-type f
Einschränkung aufgehoben wurde).quelle
-type f
da es möglicherweise auch temporäre Verzeichnisse gibt (obwohl das Beispiel in der Frage sie nicht berücksichtigt, also sind sie wahrscheinlich nicht da ...)-type f
werden nur reguläre Dateien gelöscht, sodass beispielsweise symbolische Links nicht gelöscht werden./tmp/our_cache
so gut wie möglich entfernenrm -r /tmp/our_cache
. Wenn Sie nicht standardmäßige Optionen verwenden, können Sie diese verwenden-mindepth 1
. Beachten Sie, dass es im Gegensatz dazurm /tmp/our_cache/*
auch Unterverzeichnisse sowie deren Inhalt und versteckte Dateien entfernt.Sie können den Standardfehler
/dev/null
so umleiten, dass dieser nicht gedruckt wirdquelle
Ein anderer Weg (wenn auch etwas übertrieben ...):
Dies verwendet
test
oder[
, um zu testen, ob die Zeichenfolge, die von der Ausführung einesls
in Ihrem Verzeichnis zurückgegeben wurde, nicht leer ist. Wenn diese Zeichenfolge dann und nur dann NICHT leer ist, wird alles in Ihrem Verzeichnis entfernt.HINWEIS: Wenn Sie den Glob aus dem entfernen,
ls
wird der Fehler "Keine Dateien" unterdrückt.quelle
Wenn Sie ein BASH-Skript verwenden, können Sie Folgendes versuchen:
Andernfalls wird immer noch ein Fehler ausgegeben, wenn ein "echtes" Problem vorliegt oder wenn eine Datei geschützt ist (Sie müssten dann den
-f
Modifikator "rm
löschen", um diesen Dateityp zu löschen). Der Fehler wird jedoch vermieden, wenn keine Dateien vorhanden sind.Wenn Sie für Ihre Skripterstellung eine andere Shell als BASH verwenden, wie zsh, ksh, können Sie diese andere Syntax ausprobieren, die möglicherweise portabler ist:
quelle