Korzystam z następującego polecenia:
find /var/www/html/content/processing -type d -mtime +1 -exec rm -rf {} \;
Chciałbym usunąć wszystkie foldery w processing
folderze (folderu przetwarzania nigdy nie należy usuwać).
Polecenie usuwa również processing
folder. Jak ograniczyć skrypt do usuwania tylko folderów w tym folderze?
Odpowiedzi:
Najprościej byłoby po prostu dodać
-mindepth 1
, co spowoduje pominięcie pierwszej hierarchii głębokości, a tym samym pominięcie katalogu nadrzędnego.Ponadto nie potrzebujesz dodatkowego
-exec
połączeniarm
, możesz tylkodelete
foldery bezpośrednio, jeśli są puste.Jeśli nie są puste:
Jeśli jesteś leniwy, możesz także rozwinąć symbol wieloznaczny. Ponieważ
*
domyślnie nie zawiera bieżącego katalogu ( chyba żedotglob
jest ustawiony ), możesz także:Nie dotyczy to jednak również ukrytych folderów, również ze względu na tę
dotglob
opcję.źródło
Problem polega na tym, że find zwraca bieżący katalog (.) Wraz z innymi katalogami, więc usuwa folder przetwarzania oraz podkatalogi. Szybkim sposobem obejścia tego byłoby dodanie opcji
który zatrzymuje wyszukiwanie wyjścia z bieżącego katalogu, a z kolei uniemożliwia jego usunięcie.
To działałoby, gdybyś uruchomił polecenie w katalogu przetwarzania, aby uwzględnić fakt, że używasz ścieżki bezwzględnej:
Całe polecenie brzmiałoby:
źródło
-name
odnosi się do basename, nigdy nie pasuje do niczego z ukośnikiem. Prawdopodobnie musisz użyć-path
.Już odpowiedziałem, nadal chciałbym wymienić inne podejście.
find /var/www/html/content/processing -mindepth 1 -maxdepth 1 -type d
Wyklucza to katalog główny (a także podkatalogi), a teraz możesz zastosować do niego dowolne polecenie.
>> Opcje:
-mindepth 1: Aby wykluczyć katalog główny
-maxdepth 1: Aby uniknąć parsowania podkatalogów. (W przypadku kwestionowanego scenariusza nie jest to potrzebne).
-type d: wyświetla tylko typy katalogów. Ta opcja powinna pojawić się po maksymalnym użyciu mindepth.
źródło
-maxdepth 1
? Dlaczego-type d
dwa razy? Czym różni się to od przyjętej odpowiedzi?