Linux / Comando / rm / Comando per eliminare file o directory

Il comando rm in Linux elimina i file, e usando l'opzione -r elimina anche le directory e i loro contenuti. Poiché generalmente non passa attraverso il cestino, assicurati di controllare il percorso e gli elementi da eliminare prima di eseguire il comando.

Cose da controllare prima dell'eliminazione

Questo articolo si basa su rm di GNU coreutils e sulla shell Bash. I file cancellati con rm possono essere difficili da recuperare con metodi normali. Eseguire il backup dei file importanti separatamente e controllare prima la posizione attuale e la destinazione con pwd e ls -la.

rm non mostra un messaggio di conferma ogni volta. Il comportamento predefinito dipende dai permessi di scrittura dei file, se l'input proviene da un terminale, ecc., e le impostazioni di alias nella shell possono anche influire. Per confermare ciascun file esplicitamente, usare -i. Per condizioni dettagliate, fare riferimento al manuale GNU rm.

Cancellazione dei file

Di seguito è riportato un esempio di creazione di una nuova directory di pratica e di preparazione dei file da eliminare al suo interno. Se rm-practice esiste già nella posizione corrente, usa un'altra posizione vuota, e se il primo comando fallisce, non continuare l'esecuzione.

mkdir rm-practice
cd rm-practice
printf 'practice\n' > sample.txt
ls

Dopo aver confermato che sample.txt è visualizzato, esegui il comando sottostante. Nel messaggio di conferma, inserisci y per eliminare, oppure inserisci n se non vuoi eliminare.

rm -i sample.txt
ls

Se hai approvato l'eliminazione, sample.txt non apparirà più nei risultati di ls. rm sample.txt può eliminare il file senza conferma, quindi non presumere che un messaggio di conferma apparirà sempre.

Eliminazione delle directory

Per eliminare solo una directory vuota, puoi usare rmdir. Di solito fallisce se la directory non è vuota.

mkdir empty-dir
rmdir empty-dir

Per eliminare directory con contenuti, usa -r. Il comando qui sotto crea directory e file di prova, li verifica e poi li elimina. Usare -i insieme chiederà conferma per ogni elemento.

mkdir example-dir
printf 'practice\n' > example-dir/file.txt
ls -la example-dir
rm -ri example-dir

I messaggi di conferma potrebbero chiedere di entrare nelle directory e di eliminare file e directory. Prima di rispondere a ogni domanda, verifica il nome e approva solo gli elementi che intendi eliminare. Rifiutare alcune domande può far sì che la directory rimanga o che vengano visualizzati errori.

Caratteri jolly e file nascosti

Schemi come *.txt vengono espansi dalla shell ai nomi corrispondenti prima che rm venga eseguito. Prima di eliminare più file contemporaneamente, controllare prima i nomi corrispondenti con un comando come il seguente invece del comando di eliminazione.

printf '%s\n' ./*.txt

Dopo aver confermato che i nomi visualizzati sono gli obiettivi desiderati, utilizzare rm -i ./*.txt solo quando necessario. Se non ci sono file corrispondenti, lo schema può essere mostrato così com'è oppure il comportamento del comando può cambiare a seconda delle impostazioni di Bash. Racchiudere l'intero schema tra virgolette impedisce l'espansione usuale dei nomi dei file.

Nelle impostazioni predefinite di Bash, * non include elementi nascosti che iniziano con un punto, ma questo può variare a seconda delle impostazioni come dotglob. I comandi che eliminano un'ampia gamma come rm -rf * senza verificare possono causare danni significativi se la posizione corrente e i risultati dell'espansione sono valutati erroneamente. Le differenze per ciascuna impostazione possono essere verificate in Documentazione di Bash sull'espansione dei nomi di file.

Opzioni e percorsi utilizzati frequentemente

  • -i: Conferma ogni elemento da eliminare. Gli elementi rifiutati non saranno eliminati.
  • -r: Elimina ricorsivamente il contenuto all'interno della directory.
  • -f: Ignorare i target che non esistono e non visualizzare messaggi di conferma. Questa opzione non risolve gli errori di permesso.
  • -v: Mostra gli elementi eliminati per aiutare a verificare i risultati.

I percorsi con spazi dovrebbero essere racchiusi tra virgolette come rm -i "my file.txt". Se il nome del file inizia con un trattino, specificarlo dopo -- come rm -i -- -draft.txt per evitare che venga interpretato come un'opzione.

Se si verifica un errore di permesso, controlla se hai le autorizzazioni necessarie nella directory genitore della destinazione e consulta l'amministratore. La possibilità di eliminazione non è determinata solamente dal permesso di scrittura del file stesso. Dopo l'eliminazione, controlla di nuovo l'elenco della directory e, se hai eliminato un file necessario, interrompi immediatamente l'operazione e verifica la procedura di backup o di recupero dell'ambiente di produzione.