rmdir

Usuwa puste katalogi.

rmdir to narzędzie, które usuwa wyłącznie puste katalogi. To jego cała filozofia i zarazem największa zaleta: jeśli w katalogu cokolwiek siedzi (plik, podkatalog, ukryty .gitkeep), rmdir grzecznie odmówi i nic nie skasuje. Dzięki temu jest dużo bezpieczniejszy niż rm -r, którym łatwo zmieść pół systemu plików jednym literówkowym ruchem. W praktyce używasz go do sprzątania pustych struktur katalogów, np. po przeniesieniu danych albo w skryptach, które same po sobie posprzątają.

Składnia i najważniejsze opcje

Podstawowa składnia wygląda tak: rmdir [OPCJE] KATALOG...

  • -p (--parents) — usuwa katalog razem z jego pustymi katalogami nadrzędnymi; rmdir -p a/b/c skasuje c, potem b, potem a, o ile po drodze każdy okaże się pusty.
  • -v (--verbose) — wypisuje komunikat o każdym przetwarzanym katalogu, żebyś widział, co się właśnie wydarzyło.
  • --ignore-fail-on-non-empty — nie zgłasza błędu, gdy katalog jest niepusty (przydatne w skryptach przy -p, żeby pętla nie wywaliła się na pierwszym pełnym katalogu).
  • --help — wyświetla skróconą pomoc i listę opcji.
  • --version — pokazuje wersję narzędzia (z pakietu GNU coreutils).

Przykłady użycia

  • rmdir stary_katalog — usuwa pojedynczy pusty katalog. Jeśli coś w nim jest, dostaniesz Directory not empty.
  • rmdir log cache tmp — usuwa kilka pustych katalogów naraz; te niepuste zostaną pominięte z błędem, reszta zniknie.
  • rmdir -p projekt/2026/raporty — kasuje raporty, a następnie 2026 i projekt, dopóki kolejne poziomy są puste.
  • rmdir -v build/ — usuwa katalog i od razu potwierdza komunikatem, co dokładnie zrobił.
  • rmdir --ignore-fail-on-non-empty -p dane/archiwum — w skrypcie próbuje sprzątnąć całą ścieżkę, ale nie przerywa działania, gdy któryś poziom jest jeszcze zajęty.

Częste błędy i pułapki

Najczęstszy zonk to rmdir: failed to remove 'katalog’: Directory not empty — i to nie jest błąd narzędzia, tylko jego zasada działania. Pamiętaj, że pliki ukryte (zaczynające się od kropki) też się liczą jako zawartość, więc katalog z samym .DS_Store czy .gitkeep nie zostanie usunięty. Klasyczna pomyłka to też rmdir -p a/b w nadziei, że skasuje całe drzewo z plikami — nie, -p idzie tylko po pustych katalogach nadrzędnych. Gdy naprawdę chcesz usunąć katalog z całą zawartością, potrzebujesz rm -r (ostrożnie!). Zachowanie rmdir jest spójne na Linuksie, macOS i BSD, ale niektóre długie opcje (jak --ignore-fail-on-non-empty czy -v) to dodatki GNU coreutils — na macOS i czystym BSD mogą nie istnieć, więc nie licz tam na nie w skryptach.

Powiązane komendy: rm, mkdir, rm -r, find, ls.