W ramach skryptu wdrażania chcę zrzucić niektóre buforowane pliki z mojego katalogu tymczasowego. Używam polecenia takiego jak:
rm /tmp/our_cache/*
Jeśli jednak /tmp/our_cache
jest puste (dość powszechne przy szybkim przekazywaniu wielu zmian w krótkim odstępie czasu na nasz serwer testowy), to wyświetla następujący komunikat o błędzie:
rm: cannot remove `/tmp/our_cache/*': No such file or directory
Nie jest to wielka sprawa, ale jest trochę brzydka i chcę zmniejszyć stosunek szumu do sygnału na wyjściu tego skryptu.
Jaka jest zwięzła metoda uniksowa usuwania zawartości katalogu bez otrzymywania wiadomości, że katalog jest już pusty?
Edytuj 1
usunięto „typ f
Edytuj 2
Dodano niestandardową opcję
-mindepth 1
, aby zapobiec usunięciu katalogu głównego wyszukiwania (po usunięciu-type f
ograniczenia).źródło
-type f
ponieważ mogą istnieć również katalogi tymczasowe (chociaż przykład w pytaniu ich nie uwzględnia, więc prawdopodobnie ich nie ma ...)-type f
spowoduje tylko usunięcie zwykłych plików, więc na przykład łącza symboliczne nie zostaną usunięte./tmp/our_cache
więc równie dobrze możesz to zrobićrm -r /tmp/our_cache
. Podczas korzystania z niestandardowych opcji możesz skorzystać-mindepth 1
. Pamiętaj, że w przeciwieństwie do tegorm /tmp/our_cache/*
, usuwa również podkatalogi oraz ich zawartość i ukryte pliki.Możesz przekierować standardowy błąd, aby
/dev/null
nie drukował tegoźródło
Innym sposobem (choć nieco przesada ...):
używa tego
test
lub[
do sprawdzenia, czy ciąg znaków zwrócony po uruchomieniuls
w katalogu nie jest pusty. Wtedy, i tylko wtedy, gdy ten ciąg NIE jest pusty, usuwa wszystko z twojego katalogu.UWAGA: pozostawienie globu poza tym
ls
pomija błąd braku plików.źródło
Jeśli twój skrypt używa BASH, możesz spróbować:
W ten sposób nadal pojawia się błąd, jeśli występuje „prawdziwy” problem lub plik jest chroniony (wówczas potrzebny byłby
-f
modyfikator,rm
aby usunąć ten typ plików), ale można uniknąć błędu, gdy nie ma tam żadnych plików.Jeśli używasz do pisania skryptów innej powłoki niż BASH, takiej jak zsh, ksh, możesz wypróbować inną składnię, która może być bardziej przenośna:
źródło