Como pesquiso uma pasta para todos os arquivos zip, descompacte-os e, em seguida, compacte a pasta raiz com um zip grande como 7 zip?

3

Eu tenho um problema. Eu preciso compactar uma pasta raiz, mas ela tem muitos arquivos ZIP / BZIP / TAR em suas subpastas. Alguém pode me mostrar um script que irá pesquisar e descompactar o arquivo zip de cada subpasta e depois zerar a pasta raiz com a compactação máxima?

    
por Strago 15.01.2013 / 00:56

3 respostas

3

Deve-se notar que 7z não respeita as permissões corretamente, pois não armazena o proprietário / grupo do arquivo, etc. Não é ideal para backups no Unix, então usei tar.7z no script abaixo, que ainda proporcionará uma boa compactação. Se você realmente quiser, basta especificar .7z , mas perderá os dados de permissões.

Você precisará instalar atool dos repositórios porque eu o uso para simplificar a extração de vários formatos. Você também precisará do p7zip :

sudo apt-get install atool p7zip

Basta digitar o seguinte script no seu editor de texto, salvá-lo e torná-lo executável. Em seguida, basta executá-lo na pasta desejada (mas veja as notas importantes abaixo para ver como ele funciona).

(A linha de comando de localização neste script é usada em esta questão aqui .

#!/bin/bash

find -mindepth 2 -type f -print -exec mv {} . \;
mkdir my_files
aunpack -e * -X my_files/
apack -O-mx=9 imp_files.tar.7z my_files/
mv imp_files.tar.7z /home/$USER/
exit 0

Notas importantes:

  • Os arquivos das subpastas desejadas são entregues no diretório em que o script é executado, a menos que você queira adicionar a linha cd /home/$USER/"" à parte superior do script e colocá-la em ~/bin e, em seguida, chame-o com script_name desired_folder .

  • Os arquivos são encontrados e depois movidos para o pwd (diretório de trabalho atual) e, em seguida, um novo diretório é criado e todos eles são extraídos para ele. Eu usei aunpack e apack do pacote atools, pois eles permitem que vários tipos de arquivos sejam manipulados de uma só vez. Veja minha resposta aqui para mais informações; aunpack é ótimo, pois permite que você extraia todos os tipos de arquivos, sem precisar executar separadamente tar , 7z , etc.

  • Após os arquivos terem sido extraídos para a pasta especificada, essa pasta é compactada como tar e, em seguida, um arquivo 7zip com compactação máxima ( mx=9 ). Por fim, esse arquivo resultante é movido para a base da sua pasta pessoal.

No script, não excluí os arquivos obtidos dos subdiretórios; você pode adicionar isso se desejar e adaptar o script às suas necessidades, mas espero que isso seja útil para aprender sobre scripts básicos.

    
por user76204 15.01.2013 / 22:38
1

Tente escrever o seu próprio, é divertido! : -)

Aqui estão algumas ideias e pontos de partida:

  • Copie os dados iniciais antes de fazer experiências. (Sério, você precisará do seu backup em algum momento)
  • Crie um novo script chamado recompress.sh .
  • Torne-o executável com chmod +x recompress.sh .
  • Você pode usar localizar para obter uma lista de todos os arquivos que precisam ser manipulados. Isso funciona recursivamente. Consulte este detalhes da resposta do Stackoverflow.
  • Você teria que manipular os arquivos zip separadamente com unzip <fileanme> e todos os arquivos tar com tar xvf <filename> . Tar tem detecção automática para o tipo de arquivo. Portanto, faça dois loops find /folder -name ... separados. Ou encontre uma ferramenta que possa abranger todos os tipos de arquivos: -)
  • Excluir todos os arquivos extraídos (Lembre-se de que você fez um backup?)
  • comprima tudo com p7zip . Ou, se você quiser personalizar o nível de compactação e outras coisas, use 7zr diretamente.

Editar: Na verdade, pode ser muito mais fácil se você começar construindo os comandos passo a passo e examinando os erros / resultados de cada um.

    
por BubuIIC 15.01.2013 / 02:48
1

Você pode escrever um script ou fazer o caminho mais fácil usando a pesquisa do Nautilus.

  • Basta pesquisar por .zip → realçar todos os arquivos zip e escolher → "Extrair aqui"
  • (opcional) exclua todos os arquivos * .zip
  • refazer a etapa dos outros formatos de arquivo

Quando terminar, compacte a pasta raiz.
quick & amp; sujo:)

PS: Eu amo o terminal, mas às vezes a GUI é apenas mais rápida.
PPS: Use tar.xz para compactar a pasta raiz.

    
por Paradiesstaub 15.01.2013 / 23:03