Se hai estratto i file in modo tale che il timestamp di modifica nell'archivio non sia conservato nelle copie estratte (ma piuttosto i file estratti hanno il loro solito tempo di modifica), il modo giusto per attaccare è attraverso il tempo di modifica. Tutti i file estratti hanno un timestamp di modifica più recente rispetto al file esistente modificato più di recente in quella directory.
Ecco una situazione semplice.
Supponiamo che nessuno dei file esistenti nella directory corrente sia stato toccato per almeno 24 ore. Tutto ciò che è stato modificato nelle ultime 24 ore è quindi spazzatura dal file zip.
$ find . -mtime -1 -print0 | xargs -0 rm
Questo troverà anche alcune directory, ma rm
le lascerà in pace. Possono essere trattati in un secondo passaggio:
$ find . -mtime 1 -type d -print 0 | xargs -0 rmdir
Tutte le directory che sono state recentemente modificate sono state modificate dallo zip. Se rmdir
li rimuove correttamente, significa che sono vuoti. Le directory vuote che sono state toccate da zip sono state probabilmente create da esso: cioè provenivano dall'archivio. Non possiamo esserne sicuri al 100%. È possibile che il processo di decompressione inserisca alcuni file in una directory esistente che era vuota.
Se find
la granularità di 24 ore non è abbastanza buona per il lavoro, perché i file nella struttura sono stati modificati troppo di recente, allora prenderei in considerazione qualcosa di semplice: supponiamo che il lavoro di decompressione non abbia inserito nulla nelle sottodirectory esistenti. Vale a dire, tutto ciò che è stato decompresso è o un file al livello più alto, o una nuova sottodirectory che prima non c'era, che quindi non contiene altro che materiale dalla zip. Poi:
# list directory in descending order of modification time
$ ls -1t > filelist # descending order of modification time
Ora apriamo filelist
in un editor di testo e determiniamo la prima voce nell'elenco che non proviene dalla zip. Cancelliamo quella voce e tutto il resto dopo di essa. Ciò che rimane sono i file e le directory che provengono dalla zip. Innanzitutto ispezioniamo visivamente eventuali problemi come spazi nei nomi e occorrenze di citazioni che devono essere evitate. Possiamo quindi aggiungere virgolette intorno a tutto, se necessario: Quanto segue presuppone che tu usi Vim:
:%s/.*/"&"/
Quindi unisci tutto in una grande linea:
:%j
Ora inseriscilo rm -rf
di fronte:
Irm - rf<ESC>
Esegui la linea sotto il cursore come comando shell:
!!sh<Enter>
Sicuramente, non automatizzerei i passaggi di questa attività, a causa del rischio di cancellare i file che erano già lì o rovinare a causa di problemi con i nomi dei file.
Se stai andando sulla strada ovvia per ottenere un elenco dei percorsi nella zip, quindi acquisiscilo in un file, guardalo attentamente e trasformalo in una rimozione dopo aver effettuato tutte le modifiche necessarie.
lq
opzioni perunzizp
, ho appena aggiunto alcuni trucchi classici * nix intorno alla sua risposta principale.