Como posso combinar vários arquivos 7z em um?

2

Eu estou tentando fazer um script que leva um grande número de arquivos 7z e os combina em um único arquivo. Aqui está o que eu tenho até agora.

#!/bin/bash
DUMPPATH="/home/backups/dumps/"
NEWPATH=$DUMPPATH"combined/"
FILETYPE="*.7z"
DATE="$(date +%Y-%m-%d-%H-%M-%S)"
NEWNAME=$NEWPATH"AllAsOf"$DATE".7z"
for FILE in $(ls $DUMPPATH$FILETYPE)
do
        echo -n $FILE"..."
        7z e $FILE -so | 7z a -si -mx=9 $NEWNAME
        if [ $? -eq 0 ]; then
                echo "Done."
        else
                echo "Something broke"
                exit
        fi
done

Quando eu executei o script, recebi Error: Duplicate filename , então tentei executar apenas as entranhas do script: 7z e /home/backups/dumps/foo.7z -so | 7z a -si -mx=9 /home/backups/dumps/combined/combined.7z . Eu olhei dentro de combined.7z e contém um arquivo chamado combined . O motivo pelo qual meu script não estava funcionando é que cada arquivo adicionado ao combined.7z está sendo incluído como o mesmo nome de arquivo.

Eu acho que preciso especificar o nome do arquivo dentro do qual o 7z adiciona cada arquivo porque ele está recebendo seus dados de stdin . Existe uma maneira de fazer isso?

    
por aswine 20.03.2018 / 21:46

1 resposta

1

Eu aprendi com esta questão que eu posso adicionar o nome do arquivo depois do -si flag em 7z. Eu adicionei uma linha para obter o nome do arquivo, também. Meu script tornou-se:

#!/bin/bash
DUMPPATH="/home/backups/dumps/"
NEWPATH=$DUMPPATH"combined/"
FILETYPE="*.7z"
DATE="$(date +%Y-%m-%d-%H-%M-%S)"
NEWNAME=$NEWPATH"AllAsOf"$DATE".7z"
for FILE in $(ls $DUMPPATH$FILETYPE)
do
        echo -n $FILE"..."
        THISNAME=$(echo $FILE | sed "s|.*"$DUMPPATH"||" | sed "s/\.7z.*//")
        7z e $FILE -so | 7z a -si$THISNAME -mx=9 $NEWNAME
        if [ $? -eq 0 ]; then
                echo "Done."
        else
                echo "Something broke"
                exit
        fi
done

Eu sei que há uma maneira melhor de fazer esse regex, mas isso funciona.

    
por 21.03.2018 / 22:17