Localização de extração acidental - Como limpar?

4

Às vezes, faço um comando como

unzip tons_of_files.zip

E eu vou esquecer de colocar um -d para apontar para um subdiretório. Isso faz com que a pasta atual seja preenchida com vários arquivos mesclados com os arquivos existentes.

Qual é a melhor maneira de remover todos esses novos arquivos e / ou movê-los para um novo diretório? Eu quero evitar ter que examinar manualmente o diretório e determinar se o arquivo fazia parte do arquivo ou já estava presente.

    
por Gordon 12.10.2010 / 21:25

4 respostas

5

Uma maneira rápida pode ser a seguinte:

unzip -qql tons_of_files.zip | while read -r l d t n ; do rm -fr "$n" ; done

Como isso faz rasuras automáticas: use a seu próprio risco . Para ver uma pré-visualização, substitua ... rm ... por ... echo rm ... .

    
por 12.10.2010 / 21:48
1

Se você extraiu os arquivos em um diretório em que você não modificou ou moveu nenhum arquivo por alguns minutos antes da extração, é possível informar os arquivos extraídos pelo seu recente ctime . Isso não é perfeito (se um diretório contém um arquivo extraído, você não pode dizer se ele foi criado por descompactar ou já existia antes (talvez estar vazio)), mas funciona razoavelmente bem na prática.

O seguinte comando GNU find move arquivos e diretórios no diretório atual cuja ctime está há menos de 2 minutos para /other/dir . ls -lctr pode ajudar a encontrar um tempo de corte adequado.

find . -mindepth 1 -maxdepth 1 -cmin -2 -exec mv {} /other/dir \;

Equivalente a Zsh:

mv *(cm-3) /other/directory

O seguinte comando GNU find move arquivos com um ctime recente semelhante na árvore de diretórios com raiz no diretório atual para um caminho similar em /other/dir .

find . -mindepth 1 -cmin -2 -type f -exec sh -c '
    for x; do
      mkdir -p "$0/${x%/*}"
      mv "$x" "$0/$x"
    done
  ' /other/dir {} +

Zsh equivalente (quase: este reproduz toda a hierarquia de diretórios, não apenas os diretórios que conterão arquivos):

autoload zmv
mkdir -p ./**/*(/cm-3:s"|.|/other/dir|")
zmv -Q '(**/)(*)(.cm-3)' /other/dir/'$1$2'
    
por 12.10.2010 / 22:40
1

$ for i in 'unzip -qql tons_of_files.zip | tr -s " "| cut -d" " -f 5 | sed 's/^.*///''; do echo $i; done

Altere echo para rm .

O que está fazendo (dentro dos backticks):

  1. listar arquivos (um-by-one)
  2. espaços para squeeze
  3. selecione o quinto campo
  4. excluir tudo o que é nome da pasta
por 25.12.2010 / 02:54
0

Assumindo que seu diretório de trabalho atual é a pasta em que você extraiu o arquivo acidentalmente:

unzip -Z1 ../../accidentally-extracted.zip | xargs rm

Explicação:

  1. unzip -Z1 lista todos os arquivos no arquivo zip linha por linha
  2. xargs passa cada linha como um argumento para rm

Se você não estiver dentro da pasta que acidentalmente extraiu, poderá acabar excluindo inadvertidamente os arquivos se eles corresponderem a um dos arquivos no zip.

Se não tiver certeza, você pode executar xargs com -p para solicitar a execução de cada execução. Você pode fazer as primeiras execuções para ter certeza de que não estragou algo.

    
por 24.01.2018 / 17:01