Perché l'eliminazione dalla riga di comando richiede molto meno tempo rispetto a una GUI?


26

Qualcosa di cui mi chiedevo mentre stavo cancellando una dozzina di immagini dal mio computer: con un rapido rm -rfcomando sul contenuto della directory, tutte le immagini erano sparite in un attimo. Quando trascino la stessa dozzina di immagini in un cestino / divieto di riciclo, a volte ci vogliono 10 secondi o più.

Ora sono sicuro che alcuni provengono dal sovraccarico della GUI e simili, e alcuni potrebbero essere il fatto che il file "esista" ancora in qualche modo se viene messo nel cestino, ma c'è qualcos'altro che rappresenta una disparità di tempo così grande ? "Rm" e "delete" sono comandi così fondamentalmente diversi, quindi sto cercando di confrontare mele e arance?


1
È vero anche su Windows, presumibilmente per gli stessi motivi indicati di seguito.
Chris H,

Risposte:


38

Come hai giustamente notato, la GUI non si limita a "eliminare" i file.

$ rm -rf 

ricorre in cartelle eliminando i file e le cartelle che trova lì.

La GUI prima scansiona l'intero albero per capire cosa c'è lì (quindi sa quanto deve fare per disegnare la bella barra), quindi ricicla attraverso l'albero spostando di nuovo i file dalla posizione corrente alla posizione della file del cestino per la tua GUI specifica. Lo spostamento richiede più tempo, poiché deve prima generare un nuovo nome file univoco, collegare il file nella cartella cestino, quindi scollegarlo dalla cartella corrente e aggiornare un indice di provenienza dei file in modo che possano essere "annullati" - molte operazioni invece di una sola.

Ad esempio, su Gnome 3 i file vengono spostati nella posizione:

~/.local/share/Trash/files/<filename>[.<version>]

Dove si filenametrova il nome del file originale ed versionè un numero di versione incrementale per garantire che il file sia univoco (la prima istanza del file non ha un numero di versione). A ciò è associato un .trashinfofile archiviato nella cartella:

~/.local/share/Trash/info/<filename>[.<version>].trashinfo

Questo file contiene il percorso originale del file prima dell'eliminazione, nonché la data e l'ora in cui il file è stato eliminato.

Tutte queste operazioni extra, che devono essere eseguite su ogni singolo file dell'albero che stai eliminando, assicurano di essere in grado di ripristinare qualsiasi file dal cestino e di poter eliminare i file con lo stesso nome dal stessa posizione e ripristinare comunque le versioni precedenti.

Niente di tutto ciò viene fatto con un semplice rmo mvcomando.


1
Ehi, chi ha cancellato tutti i commenti? Stavamo solo scoprendo che questa risposta potrebbe essere sbagliata. Almeno trash-clinon sembra farlo in modo ricorsivo. Quando si elimina una cartella, Gnome 3 inserisce davvero un .trashinfofile in modo ricorsivo per ogni sottocartella e per tutti i file contenenti?
mb21

Immagino che sia diventato troppo turbolento per loro! ;-)
Jordan Plahn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.