Se você extraiu os arquivos de modo que o registro de data e hora da modificação no arquivo morto não seja preservado nas cópias extraídas (mas os arquivos extraídos têm seu tempo de modificação usual), a maneira correta de atacar isso é através do tempo de modificação. Todos os arquivos extraídos têm um carimbo de data / hora de modificação mais recente 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 tenha sido tocado por pelo menos 24 horas. Qualquer coisa que foi 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 um segundo passe:
$ find . -mtime 1 -type d -print 0 | xargs -0 rmdir
Todos os diretórios que foram modificados recentemente foram modificados pelo zip. Se rmdir
removê-los com sucesso, isso significa que eles estão vazios. Diretórios vazios que foram tocados pelo zip provavelmente foram criados por ele: ou seja, vieram do arquivo morto. 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 find
a granularidade de 24 horas não for boa o suficiente para o trabalho, porque os arquivos na árvore foram modificados muito recentemente, então considerarei algo simples: suponha que o trabalho de descompactação não coloque nada nos subdiretórios existentes. Ou seja, tudo o que foi descompactado é um arquivo no nível superior ou um novo subdiretório que não existia antes e, portanto, não contém nada além do 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 tudo mais depois dela. O que resta são os arquivos e diretórios que vieram do zip. Primeiro, inspecionamos visualmente questões como espaços nos nomes e ocorrências de aspas que precisam ser escapadas. Em seguida, podemos adicionar aspas a tudo, se necessário: O seguinte pressupõe que você usa 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 automatizaria as etapas desta tarefa, devido ao risco de apagar arquivos que já estavam lá ou estragar tudo devido a problemas de nome de arquivo.
Se você for o caminho óbvio para obter uma lista dos caminhos no zip, capture-o em um arquivo, examine-o com muito cuidado e transforme-o em uma remoção após fazer a edição necessária.
lq
opções paraunzizp
, apenas adicionei alguns truques clássicos * nix em torno de sua resposta principal.