Trova / controlla i file ridondanti per scopi di pulizia e backup


1

Molto spesso voglio scoprire se il contenuto di determinate cartelle corrisponde o se il contenuto di una singola cartella è ridondante, forse per verificare se è duplicato e può essere rimosso o per assicurarsi che ci siano copie di ogni file da qualche parte.

Se le strutture di cartelle corrispondono ed i file non sono stati rinominati è possibile utilizzare diff -r, meldo qualunque strumento che mette a confronto le cartelle (e si ferma a lavorare se si rinomina i file o anche directory).

Se vuoi solo trovare duplicati, puoi usare strumenti come duffo fdupes.

Ma - e questo porta alla mia domanda - vorrei verificare / interrogare se due cartelle hanno lo stesso contenuto in base al contenuto del file (piuttosto che il contenuto del file e la base del percorso del file come con diff) O invece di elencare i duplicati situati in una determinata cartella Voglio ottenere file senza almeno una copia da qualche parte sul mio sistema.

L'output di un possibile strumento potrebbe essere simile al seguente:

fuzzydiff folder1 folder2
Only in 1: folder1/img_1234.jpg
Only in 2: folder2/bali/very_nice_moment.jpg
Only in 2: folder2/pictures_of_me/favorite_picture.jpg

(in questo esempio le cartelle balio pictures_of_meall'interno folder2potrebbero non esistere, folderquindi diff -rsalterebbe semplicemente la directory)

C'è qualcuno con esigenze / requisiti simili e che ha trovato un modo conveniente e affidabile per recuperare le informazioni descritte sui file system con diverse centinaia di GB fino a un paio di TB in modo efficiente ?

Sto lavorando su un sistema Linux, quindi gli approcci suggeriti dovrebbero essere Posix-ish e basi della riga di comando (per impilare / combinare i risultati).

Nel caso in cui la mia descrizione sia ancora troppo sfocata: un esempio sempre ricorrente di un problema che voglio risolvere è: voglio eliminare una grande cartella con immagini o video che ho copiato / spostato / rinominato e voglio avere un (spero così vuoto) elenco di file all'interno di questa cartella di cui non ho copie da qualche parte.

Attualmente sto scrivendo uno strumento che soddisfa i miei requisiti, ma dubito di essere il primo ad avere questo tipo di situazione / problema da risolvere. In ogni altro caso apprezzo qualsiasi suggerimento o feedback che aiuti lo sviluppo!

Risposte:


1

Hai provato git-annex per la gestione dei file? Tiene automaticamente traccia di quali file si trovano su quale memoria e si assicura che ci siano almeno 𝒏 copie di un file nei repository.

Ad esempio, se lo esegui git annex drop Photos/2014, eliminerà i file localmente ma solo dopo aver verificato che esistano anche su un altro disco (e git annex get …li copierebbe nuovamente). Ci sono anche l'inverso git annex move/copy --to.

Se riorganizzi i file, annex add && annex syncaggiornerebbe la struttura della directory in tutti i repository. C'è anche una funzione di " contenuto preferito " che consente di specificare in quali repository git-annex dovrebbe copiare automaticamente i file - ad esempio, un grande disco di backup vorrebbe tutti i file, il desktop vorrebbe solo tutto ciò che è stato recuperato manualmente tramite annex get, il tuo laptop vorrebbe solo la directory "Foto / 2016", ecc.

Quindi la tua domanda originale, "quali file sono qui ma non lì", potrebbe essere risolta tramite:

git annex find --in . --not --in backup_vol
git annex find --in . --not --copies 2

Se il repository ha numcopies≥ 2, è possibile utilizzare:

git annex find --approxlackingcopies 1

Nota che probabilmente vorrai abilitare la "modalità diretta" tramite git annex direct- questo rende git-annex traccia solo le ultime versioni del contenuto dei file, ma semplifica anche lavorare con i file stessi. (La modalità sottile v6 migliora questo.)


Ho anche considerato l'utilizzo di strumenti come git. Ma in questo modo ho solo un altro rilevatore di duplicati ma nessuna risposta alla mia domanda sulle differenze tra due cartelle. Ma +1 per git-annex- Ci proverò (ma dubito che funzioni per terabyte di file accumulati in decenni )
frans

Dovrebbe funzionare. È stato praticamente costruito per questo. Solo l'iniziale git annex addimpiegherà un po 'di tempo, ma hai comunque chiesto il controllo del contenuto del file, quindi è inevitabile.
Grawity

1

Puoi farlo con rmlint .

Utilizzare la seguente riga di comando per trovare i file che si trovano solo nella cartella3:

rmlint -k -o uniques folder1 folder2 // folder3

Modifica: anche per scoprire quali file possono essere eliminati in modo sicuro dalla cartella3 perché hanno copie da qualche parte nella cartella1 o nella cartella2:

rmlint -km folder3 // folder1 folder2

Ciò genererà uno script di shell (rmlint.sh) che è possibile utilizzare per eliminare i file identificati. Per set di dati di grandi dimensioni potresti voler aggiungere una barra di avanzamento aggiungendo -gal comando.


sembra promettente, lo controllerò! Purtroppo non è confezionato in distribuzioni standard e si deve compilarlo: /
Frans

Concordato; stiamo riscontrando problemi nel trovare i packager ad eccezione di Arch Linux. Comunque è una compilazione piuttosto veloce.
thomas_d_j,
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.