Comando Linux rmdir: Come rimuovere directory vuote

Il comando rmdir in Linux rimuove directory vuote. Lascia intatte le directory che contengono file o sottodirectory, quindi puoi rimuovere directory vuote preservando i contenuti.

Cancellazione di directory vuote

Specifica il percorso della directory da rimuovere. I percorsi relativi sono risolti dalla directory di lavoro corrente, quindi controlla la posizione e il bersaglio con pwd e ls -la prima di eseguire il comando.

rmdir empty-dir

Una directory vuota viene normalmente rimossa senza output. Se contiene file o sottodirectory, non viene rimossa e appare un errore come Directory not empty. I messaggi di errore dipendono dalla lingua del sistema. Le directory rimosse normalmente non vengono spostate nel cestino, quindi conferma prima il bersaglio.

Se specifichi più directory, tenterà di cancellare ciascuna di esse. Anche se alcune falliscono perché non sono vuote, altri bersagli possono ancora essere cancellati, quindi non dovresti considerare questa operazione come qualcosa che riesce completamente o viene completamente annullata.

rmdir first-dir second-dir

Prova tu stesso

Esegui la seguente pratica in una posizione che non si sovrapponga ai file esistenti. Se rmdir-practice esiste già, scegli un altro nome, e se la creazione della directory fallisce, non eseguire il comando successivo. Se usi un nome diverso, sostituisci rmdir-practice nei comandi qui sotto con quel nome.

mkdir rmdir-practice

Se la creazione ha successo, entra nella directory della pratica con il comando seguente e crea directory vuote e directory che contengono file.

cd rmdir-practice
mkdir empty busy
touch busy/example.txt

empty è vuota e busy contiene file. Prova a cancellare entrambe le directory in ordine.

rmdir empty
rmdir busy

Il primo comando elimina empty. Il secondo fallisce perché busy non è vuoto e i file rimangono. Puoi usare il comando successivo per controllare anche gli elementi nascosti.

ls -la busy

. e .. nell'output si riferiscono alle directory corrente e principale. Se ci sono altri file o sottodirectory, non è vuota. La seguente pratica -p viene svolta anche in questa directory. Quando si rimuovono i file di pratica, controlla prima il bersaglio.

Opzione -p per eliminare anche le directory genitore

-p o --parents prova a eliminare le directory dalla directory specificata fino alle directory genitore in ordine. Ogni directory deve essere vuota a quel momento. Puoi verificarlo nella directory di pratica come segue.

mkdir -p a/b/c
rmdir -p a/b/c

Se non ci sono altri contenuti, saranno eliminati nell'ordine c, b, a. Se ci sono altri file nella directory genitore, eliminare le directory inferiori potrebbe avere successo, ma eliminare la directory genitore potrebbe fallire. Pertanto, assicurati che l'intero percorso sia destinato alla cancellazione prima di eseguire. Dopo aver terminato l'esercizio, torna alla directory genitore con cd ...

Mostra le operazioni e ignora le directory non vuote

-v o --verbose visualizza messaggi sulla directory in elaborazione. Controlla i messaggi di errore per determinare se la cancellazione è effettivamente avvenuta.

rmdir -v empty-dir

L’opzione --ignore-fail-on-non-empty di GNU rmdir ignora il fallimento dell'eliminazione che si verifica perché la directory non è vuota. La directory o il suo contenuto non vengono eliminati. Il comando seguente viene eseguito dalla directory genitore della directory di prova.

rmdir --ignore-fail-on-non-empty rmdir-practice/busy

Questa opzione ignora solo le directory se non sono vuote. Non è un'opzione che ignora altri errori come percorsi mancanti o mancanza di permessi. Se si verificano solo fallimenti ignorati, lo stato di uscita può essere mostrato come riuscito, quindi non giudicare che tutte le directory siano state eliminate basandoti esclusivamente sullo stato di uscita. Puoi verificare il comportamento dettagliato dell'opzione nel manuale GNU rmdir.

Controllo quando l'eliminazione fallisce

  • Non vuoto: Sostituisci directory con il percorso reale in ls -la directory per controllare file e sottodirectory nascosti. Nella comune ls, gli elementi il cui nome inizia con un punto potrebbero non essere visibili.
  • Problema di autorizzazioni: Controlla le autorizzazioni, la proprietà e lo stato del filesystem del target e della sua directory genitore. La cancellazione generalmente richiede permessi di scrittura e ricerca per la directory genitore, e possono applicarsi altre restrizioni.
  • Problema di percorso o target: Controlla il nome e la posizione corrente. Un collegamento simbolico che punta a una directory è diverso dalla directory stessa, quindi verifica con ls -ld.

rmdir * permette alla shell di passare più nomi nella directory corrente al comando. I file possono anche essere inclusi, e i nomi nascosti di solito non sono inclusi, quindi è più sicuro controllare prima il target con ls -la e specificare le directory necessarie. Se è necessario eliminare una directory che contiene file, non è possibile farlo con rmdir, e l'eliminazione dei file dovrebbe essere decisa separatamente dopo aver esaminato il contenuto.