Comando rmdir in Linux: rimuovere directory vuote e percorsi superiori
rmdir rimuove soltanto le directory vuote: se restano file, elementi nascosti o sottodirectory, si ferma senza cancellarne il contenuto. È utile per ripulire cartelle di lavoro senza ricorrere alla cancellazione ricorsiva.
Gli esempi si riferiscono a GNU Coreutils. Controlla rmdir --help e man rmdir sul sistema di destinazione; le opzioni lunghe e -v non sono garantite dalla specifica POSIX.
Che cos'è il comando rmdir?
rmdir elimina una directory esistente soltanto se è vuota; le voci speciali . e .. non contano come contenuto. Non elimina file normali né attraversa ricorsivamente le sottodirectory. Per rimuovere una voce servono normalmente scrittura e attraversamento nella directory superiore, oltre all’attraversamento dei componenti del percorso; possono intervenire anche lo sticky bit (che limita la rimozione nelle directory condivise in base al proprietario), politiche di sicurezza o un filesystem in sola lettura.
Sintassi di base
rmdir [OPTION]... DIRECTORY...
Racchiudi tra virgolette i percorsi con spazi. In GNU Coreutils, -- termina le opzioni: ad esempio rmdir -- -cache tratta -cache come nome. La sintassi precedente è uno schema con segnaposto, non un comando da copiare letteralmente.
Uso base di rmdir
Rimuovere una directory vuota
Esegui le prove in una nuova cartella di lavoro: mkdir rmdir-demo && cd rmdir-demo. Se il nome esiste già, scegline un altro. Crea poi il bersaglio con mkdir old-cache: il comando seguente lo rimuove solo se è ancora vuoto.
rmdir old-cache
Rimuovere più directory vuote
Per preparare questa prova, crea tre directory nuove con mkdir empty-a empty-b empty-c. Gli argomenti vengono elaborati nell’ordine indicato. Alcune rimozioni possono riuscire anche se altre falliscono: un codice di uscita diverso da zero non annulla quelle già completate.
rmdir empty-a empty-b empty-c
Rimuovere anche le directory superiori vuote
Prepara una gerarchia di prova con mkdir -p a/b/c. Con -p, rmdir tenta di rimuovere prima a/b/c, poi a/b e infine a. Se un livello non è vuoto, la rimozione si interrompe su quel ramo; le directory inferiori già eliminate non vengono ripristinate.
rmdir -p a/b/c
Verificare il risultato della rimozione
Senza -v, una rimozione riuscita normalmente non produce messaggi. Il seguente esempio crea un bersaglio nuovo e interrompe lo script se la preparazione fallisce, evitando di operare su un nome già esistente. Eseguilo nella cartella di prova.
mkdir empty-demo || exit 1
rmdir empty-demo
test ! -e empty-demo
echo $?
L’output atteso è 0: è il codice restituito da test ! -e empty-demo, che verifica l’assenza del percorso, non il codice originale di rmdir. Per controllare direttamente la rimozione usa la condizione if rmdir ... mostrata più avanti. Un file nascosto rende la directory non vuota.
Opzioni principali
| Opzione | Scopo |
|---|---|
-p, --parents |
Rimuove la directory indicata e poi i componenti superiori, finché sono vuoti. |
-v |
Mostra un messaggio per ciascuna directory elaborata; in caso di errore leggi anche la diagnostica e controlla cosa rimane. |
--ignore-fail-on-non-empty |
Ignora i fallimenti dovuti a directory non vuote: non mostra la relativa diagnostica e questi fallimenti non producono un codice di uscita di errore. Non elimina il contenuto e non ignora gli altri errori. |
Le opzioni lunghe possono rendere più chiari gli script GNU. Per sistemi diversi, confronta rmdir in POSIX.1-2024, che specifica -p. Con --ignore-fail-on-non-empty, un codice zero da solo non dimostra che tutte le directory siano state eliminate.
Esempi pratici
Verificare se la directory è veramente vuota
ls senza opzioni può nascondere i nomi che iniziano con un punto. Per questa prova, ricrea old-cache con mkdir old-cache e aggiungi un file con printf "dato\n" > old-cache/.keep. I comandi seguenti permettono di vedere il file nascosto; find usa qui le opzioni GNU per esaminare soltanto il primo livello. Non cancellare automaticamente ciò che trovi: verifica prima a cosa serve.
ls -la old-cache
find old-cache -mindepth 1 -maxdepth 1 -print
Gestire il risultato nello script
Prepara il caso vuoto con mkdir cache-dir. Il seguente script mostra il messaggio di successo solo se rmdir riesce; in caso contrario conserva la diagnostica e restituisce il codice del comando. Lo stesso errore può dipendere da contenuto residuo, permessi o altri problemi: non trattarlo automaticamente come una cartella non vuota. Dopo il caso riuscito, ricrea cache-dir e aggiungi un file al suo interno per verificare il ramo di errore.
if rmdir -- cache-dir; then
printf '%s\n' 'Directory cache vuota rimossa.'
else
stato=$?
printf 'Rimozione non riuscita (codice %s). Controlla la diagnostica.\n' "$stato" >&2
exit "$stato"
fi
Seguire la rimozione dei componenti superiori
Crea prima una nuova gerarchia con mkdir -p build/tmp/session. -pv combina la rimozione dei componenti superiori con i messaggi di elaborazione; verifica il codice di uscita e i percorsi rimasti. Se devi conservare build, evita -p e indica esplicitamente soltanto build/tmp/session e build/tmp, in questo ordine.
rmdir -pv build/tmp/session
rmdir e comandi correlati
| Comando o metodo | Ruolo principale | Quando usarlo |
|---|---|---|
rmdir |
Rimuovere soltanto directory vuote | Conservare i percorsi che contengono ancora dati |
rm -d |
Rimuovere directory vuote con GNU rm | Operazioni GNU rm che includono file e directory vuote |
rm -r |
Eliminare ricorsivamente una gerarchia e il suo contenuto | Rimozione intenzionale di tutti i dati, dopo aver verificato il bersaglio |
find -empty -delete |
Cercare ed eliminare elementi vuoti corrispondenti | Pulizia secondo criteri espliciti; senza -type d include anche file vuoti |
Precauzioni importanti
I file nascosti contano come contenuti
File come .keep e .gitignore rendono una directory non vuota.
-p può rimuovere più livelli del previsto
Se ogni componente superiore è vuoto, -p può eliminarlo. Scegli il confine prima di eseguire il comando; per conservarlo, elenca soltanto le directory sotto quel confine, dalle più profonde alle meno profonde. Evita di applicare -p a un percorso assoluto senza averne esaminato tutti i componenti.
Un errore può segnalare dati da conservare
Il rifiuto di rimuovere una directory non vuota può essere il risultato desiderato. Controlla messaggi e codice di uscita prima di proseguire. Non aggiungere automaticamente rm -r per forzare la pulizia: cambia l’operazione perché cancella anche il contenuto. La verifica con ls o find è una fotografia del momento; un altro processo può modificare il contenuto prima del tentativo di rimozione.
FAQ
rmdir può rimuovere una directory che contiene file?
No. rmdir rimuove soltanto directory vuote. rm -r elimina anche il contenuto e va usato solo quando questa è l’intenzione, dopo aver verificato il percorso e i dati da conservare.
Perché una directory apparentemente vuota non riesce a essere rimossa?
Controlla prima i file nascosti con ls -la. Altre cause sono un punto di montaggio, permessi insufficienti nella directory superiore o un filesystem in sola lettura. Leggi la diagnostica invece di attribuire ogni errore al contenuto.
Come si rimuovono anche le directory superiori vuote?
Usa rmdir -p a/b/c: tenta a/b/c, a/b e a in quest’ordine. Ogni livello deve essere vuoto; conserva un confine esplicito quando non vuoi rimuovere tutta la gerarchia.
rmdir è più sicuro di rm -r?
È più restrittivo perché non rimuove le directory non vuote. Occorre comunque verificare il percorso e l’ambito di -p: anche una directory vuota può essere necessaria a un servizio.




