Verifica quali file in una cartella mancano da un'altra cartella?


2

Quando copio le foto da fonti diverse nel mio archivio principale, vorrei copiare solo i file che non sono già presenti nell'archivio. rsync o file di confronto tra applicazioni come WinMerge e Meld non sembrano controllare se un file esiste già con un nome diverso o in una sottocartella diversa. Prima copia tutte le nuove immagini di origine nell'archivio, quindi elimina i duplicati e quindi l'organizzazione dei file sembra essere un lavoro extra.

Se c'è un modo per verificare quali file in una cartella di origine non si trovano da nessuna parte in una cartella di destinazione? Dovrebbero essere controllate anche le sottocartelle. Il file può avere un nome diverso o una posizione diversa.


Se la destinazione contiene file in a posizione diversa con nomi diversi ma stesso contenuto quindi sembra che tu abbia problemi di coerenza, in primo luogo, che potresti voler risolvere. Risolvere l'archiviazione è più come fissare il sintomo, non il disturbo. Sto solo dicendo
Torben Gundtofte-Bruun

Risposte:


2

Uso find con md5sum per ottenere i checksum per tutti i file nell'origine e nella destinazione, quindi utilizzare comm per trovare i checksum mancanti dalla destinazione.

O potresti provare il -y opzione di rsync.


0

Come fare ciò dipende dal fatto che i file di immagine siano identici bit a bit o solo visivamente simili (ad esempio perché potrebbero avere commenti diversi o essere ricompressi, ritagliati ...).

Se i file sono identici e puoi rinominarli sia nell'origine che nell'archivio, è facile rinominarli per avere sempre lo stesso nome. Puoi mantenere il vecchio nome come collegamento simbolico. Non testato:

for orig in *.jpg; do
  canon=$(<"$orig" md5sum | sed 's/ .*//').jpg
  mv -i "$orig" "$canon"
  ln -s "$canon" "$orig"
done

Questo presuppone che il tuo archivio sia una singola directory. Se ci sono sottodirectory, dovrai cambiare *.jpg a **/*.jpg (richiede bash 4 o zsh), e organizzare per aggiungere la giusta quantità di ../ al ln comando.

Dopo questo rsync copierà solo il contenuto e il nome di nuove foto e nuovi nomi per le foto esistenti.

Se puoi rinominare i file solo nel tuo archivio, puoi comunque organizzare qualcosa con un uso intelligente dei link simbolici e probabilmente rsync --copy-unsafe-links.

Se i file sono visivamente simili, è più complicato e non ci può essere una risposta completamente automatica (tra una versione ritagliata e una versione di bassa qualità, un essere umano deve fare la scelta). Alcuni strumenti per confrontare immagini visivamente simili possono aiutare, ad es. GQview (interattivo) o findimagedupes (riga di comando).

Tieni presente che, poiché non specifichi il tuo sistema operativo, ho avanzato suggerimenti che funzionano sul mio. Funzioneranno su qualsiasi sistema unix-like, inclusi OSX e Cygwin. L'idea di collegamento simbolico funzionerà anche in modo nativo su Windows XP e successivi (forse anche prima) ma richiede l'installazione di strumenti aggiuntivi.


0

Il tutto " nome diverso o in una sottocartella diversa "La cosa potrebbe essere un po 'approssimativa per capire ... Certo, puoi fare un confronto di hash, ma man mano che la directory di destinazione cresce, aumenterà il tempo necessario per l'unione.

Non è molto elegante, ma che ne dici di usare qualcosa come Robocopy per Windows?

robocopy /E source destination
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.