Se você extraiu os arquivos de forma que o registro de data e hora da modificação no archive não seja preservado nas cópias extraídas (mas os arquivos extraídos têm seu horário de modificação usual), o caminho certo para atacar é através do tempo de modificação. Todos os arquivos extraídos têm um registro de data e hora de modificação mais recente do que o arquivo existente modificado mais recentemente nesse diretório.
Aqui está uma situação simples.
Suponha que nenhum dos arquivos existentes no diretório atual foi tocado por pelo menos 24 horas. Qualquer coisa que tenha sido modificada nas últimas 24 horas é, portanto, lixo do arquivo zip.
$ find . -mtime -1 -print0 | xargs -0 rm
Isso também encontrará alguns diretórios, mas rm
os deixará em paz. Eles podem ser tratados em uma segunda passagem:
$ find . -mtime 1 -type d -print 0 | xargs -0 rmdir
Todos os diretórios que foram modificados recentemente foram modificados pelo zip. Se rmdir
os remover com sucesso, isso significa que eles estão vazios. Os diretórios vazios que foram tocados pelo zip provavelmente foram criados por ele: ou seja, vieram do archive. Não podemos ter 100% de certeza. É possível que o trabalho de descompactação coloque alguns arquivos em um diretório existente que estava vazio.
Se a granularidade de 24 horas de find
não for boa o suficiente para o trabalho, porque os arquivos na árvore foram modificados muito recentemente, considerarei algo simples: suponha que o trabalho de descompactar não tenha colocado nada em subdiretórios existentes. Ou seja, tudo o que foi descompactado é um arquivo no nível superior ou um novo subdiretório que não estava lá antes, que, portanto, contém apenas material do zip. Então:
# list directory in descending order of modification time
$ ls -1t > filelist # descending order of modification time
Agora abrimos filelist
em um editor de texto e determinamos a primeira entrada na lista que não veio do zip. Excluímos essa entrada e todo o resto depois dela. O que resta são os arquivos e diretórios que vieram do zip. Primeiro inspecionamos visualmente problemas como espaços nos nomes e ocorrências de cotações que precisam ser escapadas. Podemos então adicionar aspas em torno de tudo, se necessário: O seguinte pressupõe que você use o Vim:
:%s/.*/"&"/
Em seguida, junte tudo em uma grande linha:
:%j
Agora insira rm -rf
na frente dele:
Irm - rf<ESC>
Execute a linha sob o cursor como um comando shell:
!!sh<Enter>
Definitivamente, eu não iria automatizar os passos desta tarefa, devido ao risco de apagar arquivos que já estavam lá, ou estragar devido a problemas com nomes de arquivos.
Se você estiver indo para a rota óbvia de obter uma lista dos caminhos no zip, capture-a em um arquivo, examine-a com muito cuidado e a transforme em uma remoção depois de fazer qualquer edição necessária.