1 11/10/2026 7 min

Su Linux una directory non si elimina con rmdir se contiene file o sottodirectory. Il comportamento è voluto: evita di cancellare contenuti per errore. Se devi intervenire in modo corretto, la scelta dipende da un punto semplice ma spesso ignorato: vuoi rimuovere solo il contenitore oppure anche tutto il contenuto?

Se l’obiettivo è cancellare una directory non vuota, il comando tipico è rm -r. Se però stai operando su un sistema in produzione, la domanda vera non è “quale comando usare”, ma “cosa c’è dentro, chi lo usa e come torno indietro se sbaglio”. In altre parole: prima osserva, poi elimina.

Quando rmdir fallisce e perché è una buona cosa

rmdir funziona solo su directory vuote. Se provi a usarlo su una directory con contenuti, ottieni un errore simile a questo:

rmdir: failed to remove 'cartella': Directory not empty

Questo limite è utile perché ti costringe a distinguere tra una rimozione strutturale e una distruttiva. Nel primo caso vuoi togliere un punto di mount, una cartella temporanea o un path creato per errore. Nel secondo caso vuoi cancellare dati reali, e allora serve una verifica preventiva più seria.

Il comando corretto: rm -r

Per eliminare una directory non vuota usa:

rm -r /percorso/della/directory

L’opzione -r significa ricorsivo: rm scende nella struttura e rimuove file e sottodirectory fino a eliminare il contenitore. Se vuoi evitare di essere bloccato da file protetti in scrittura, puoi vedere spesso anche -f, cioè forzato:

rm -rf /percorso/della/directory

Qui però il rischio sale parecchio: -f riduce i prompt e ignora molti errori, quindi un path sbagliato può fare danni rapidi. In ambito operativo, rm -rf non è un comando da digitare “a memoria” senza prima controllare il path completo.

Controllo minimo prima di cancellare

Prima di rimuovere una directory, fai almeno questi controlli. Non sono formalità: servono a evitare di cancellare il mount sbagliato, una directory condivisa o un path montato da storage esterno.

  1. Verifica il path assoluto. Un errore con un path relativo può puntare altrove rispetto a quanto immagini. Usa pwd e realpath.
  2. Lista il contenuto. ls -la o find ti dicono se la directory contiene file nascosti, sottodirectory o mount point.
  3. Controlla i permessi. Se non sei owner o non hai write sul parent, la cancellazione fallirà o richiederà privilegi elevati.
  4. Valuta se è un mount point. Cancellare il path di un mount point non smonta il filesystem: elimina solo il punto di aggancio se è vuoto, oppure fallisce se non lo è.

Esempio pratico:

pwd
realpath cartella
ls -la cartella
find cartella -maxdepth 2 -mindepth 1 | head

Se find mostra file inattesi, fermati e chiarisci la provenienza prima di cancellare. Se invece la directory è solo un residuo di deploy o una workspace temporanea, puoi passare alla rimozione con meno rischio.

Rimozione sicura: prima prova, poi esegui

Un metodo prudente consiste nel simulare mentalmente l’impatto e, se necessario, spostare prima la directory in un’area di quarantena invece di eliminarla subito. Questo non sostituisce la cancellazione, ma ti dà un rollback semplice.

  1. Rinomina o sposta la directory se vuoi una finestra di recupero rapida.
  2. Verifica che il servizio non la usi più, se stai lavorando su un’applicazione o su un web root.
  3. Elimina solo dopo il check con rm -r.

Per esempio, se vuoi conservare un margine di recupero:

mv cartella cartella.old
# verifica che tutto funzioni senza quella directory
rm -r cartella.old

Questo approccio è utile quando la directory contiene configurazioni, upload o dati temporanei ma non ancora definitivamente scartati. Se invece stai ripulendo un ambiente di test, puoi eliminare direttamente, ma il controllo del path resta obbligatorio.

Che cosa succede con i permessi

Su Linux non basta poter leggere una directory per cancellarla: conta il permesso di scrittura sul parent, cioè sulla directory che contiene quella da rimuovere. Questo è un dettaglio che spesso crea confusione.

Se hai un errore di permessi, il controllo utile è questo:

ls -ld /percorso/parent
ls -ld /percorso/parent/cartella

Se il parent non ti permette la scrittura, rm non può eliminare l’entry della directory. In caso di necessità operativa, puoi usare sudo, ma solo dopo aver verificato che il path sia corretto. Elevare i privilegi per un comando distruttivo senza controllo è il modo più rapido per trasformare un errore locale in un incidente più ampio.

Esempio:

sudo rm -r /var/www/progetto/tmp-cache

Qui il blast radius è limitato se il path è chiaramente un’area temporanea. Se invece il path è ambiguo, fermati e risali con realpath e pwd.

Directory con file nascosti, symlink e casi che ingannano

Una directory può sembrare vuota con un semplice ls, ma contenere file nascosti o elementi speciali. Per questo conviene usare ls -la e non solo ls. I file che iniziano con punto sono invisibili nella lista standard, ma contano eccome per rmdir.

Attenzione anche ai symlink. rm -r elimina il link, non il target, se il symlink è trattato come file di collegamento. Il problema nasce quando qualcuno pensa di stare cancellando una copia locale mentre in realtà il path punta a un’area diversa.

Per capire meglio cosa stai toccando, puoi usare:

ls -la /percorso/della/directory
readlink -f /percorso/della/directory

Se readlink -f risolve su un path inatteso, non procedere finché non hai chiarito dove punta davvero il collegamento. È un controllo banale che evita cancellazioni fuori bersaglio.

Alternative utili quando non vuoi cancellare subito

In alcuni casi non serve eliminare immediatamente. Se stai lavorando su un server di produzione o su un ambiente condiviso, puoi preferire un flusso più reversibile.

  1. Rinomina la directory per disattivarla rapidamente.
  2. Sposta la directory in una area di quarantena con spazio sufficiente.
  3. Comprimi e archivia se vuoi tenere un backup rapido prima della rimozione.

Esempio con backup locale rapido:

tar -czf cartella-backup.tgz cartella
rm -r cartella

Questa soluzione è sensata quando il contenuto non è enorme e vuoi un punto di ritorno veloce. Se il volume è grande, la compressione può richiedere tempo e spazio disco aggiuntivo: in quel caso valuta una copia su storage separato o un backup già esistente.

Errori comuni da evitare

Ci sono alcuni errori ricorrenti che vale la pena fissare una volta per tutte.

  • Usare rmdir aspettandosi che rimuova contenuti: non lo farà.
  • Eseguire rm -rf senza controllare il path assoluto.
  • Confondere directory e mount point.
  • Ignorare file nascosti o permessi del parent.
  • Operare con privilegi elevati senza avere un rollback praticabile.

Un buon criterio operativo è semplice: se non puoi descrivere a voce quale directory verrà eliminata e perché, non sei pronto a eseguire il comando. Questo vale ancora di più quando il path è corto, generico o simile ad altri path del sistema.

Esempio completo: pulizia di una directory temporanea

Immagina una directory temporanea lasciata da un processo applicativo: /var/tmp/app-cache. Prima di cancellarla, fai una verifica rapida.

realpath /var/tmp/app-cache
ls -la /var/tmp/app-cache
find /var/tmp/app-cache -maxdepth 2 | head

Se il contenuto è davvero solo cache o file temporanei e nessun processo ne dipende più, puoi procedere:

rm -r /var/tmp/app-cache

Dopo la rimozione, verifica che il path non esista più:

test ! -e /var/tmp/app-cache && echo OK

Se il comando restituisce OK, la directory è stata rimossa. Se invece il path è ricreato subito dopo, significa che un servizio la rigenera: in quel caso il problema non è la cancellazione, ma il processo che la rimpiazza.

Quando serve usare find invece di rm -r

In scenari più selettivi, find è utile perché consente di cancellare solo un sottoinsieme di file, ad esempio i più vecchi o quelli con un certo pattern. Questo è comodo quando la directory non è da eliminare del tutto, ma va bonificata.

find /var/log/app -type f -name '*.log' -mtime +30 -delete

Qui non stai eliminando una directory intera, ma una parte del suo contenuto. È una differenza importante: rm -r è adatto quando vuoi rimuovere tutto; find è più adatto quando vuoi selezionare con criterio. Se ti serve cancellare una directory non vuota perché è un residuo completo, resta più semplice usare rm -r dopo i controlli.

Regola pratica finale

Se la directory è non vuota, il comando corretto è quasi sempre rm -r, ma la parte davvero professionale non è il comando: è la verifica prima dell’esecuzione. Controlla il path assoluto, il contenuto reale, i permessi e l’eventuale dipendenza da servizi in esecuzione. Se hai dubbi, rinomina o sposta prima, elimina dopo.

Assunzione operativa: i comandi mostrati agiscono su Linux recente con strumenti standard di shell; se il path coinvolge dati applicativi, monta un rollback minimo prima di cancellare.