Como armazenar o caminho completo usando o 7z no linux

0

Eu estou procurando uma maneira simples de fazer backup dos arquivos que foram alterados nas últimas 24 horas e criar um arquivo 7zip diário (não preciso de permissão ou de usuários apenas arquivos).

Usando o seguinte comando, posso passar uma lista de arquivos alterados para 7Zip, e isso funciona bem. No entanto, nenhuma informação de caminho dos arquivos alterados é armazenada em 7zip.

/usr/bin/find /local-storage/public_html/ -type f -size -25M -mtime -1 -print | /usr/bin/xargs -n 1 /usr/bin/7z a -t7z -m0=lzma -mx=9 /local-storage/public_html_2013-09-03.7z

Então, se eu tentar extrair o arquivo 7zip, tudo estará em apenas um diretório e nenhum caminho.

Esperando que alguém aqui possa apontar o que eu perdi: -)

    
por StephenTrapped 03.09.2013 / 18:00

3 respostas

1

Não sei se 7z pode fazer isso, que parece ser o que eles querem dizer nesta seção da página man:

   On Linux/Unix, in order  to  backup  directories  you
   must use tar :
    -  to backup a directory  : tar cf - directory | 7za a -si directory.tar.7z
    -  to  restore  your  backup  :  7za  x  -so  directory.tar.7z | tar xf -

Em vez disso, sugiro criar uma bola de tar descompactada e então compactando-a com 7z:

find /local-storage/public_html/ -type f  -mtime -1 -print0 | 
xargs --null tar rf foo.tar && 
7za a -t7z -m0=lzma -mx=9 /local-storage/public_html_2013-09-03.tar.7z foo.tar &&
rm foo.tar

Isso criará um arquivo chamado public_html_2013-09-03.tar.7z , que conterá a bola alcalina foo.tar . Você pode então extrair tudo e manter os caminhos certos (os diretórios serão criados se não estiverem presentes e os arquivos serão sobrescritos, portanto, certifique-se de saber o que está fazendo):

7z x -so foo.tar.7z | tar rf -
    
por 03.09.2013 / 19:24
0

Parece que 7z não é particularmente adequado para o que você está tentando fazer. No entanto, se você estiver usando 7z , ainda poderá fazer o que precisa criando uma árvore temporária de arquivos e criando o arquivo a partir disso. Por exemplo, você poderia colocar essa lista de comandos em um script de shell:

cd /tmp
find /local-storage/public_html -type f -size -25M -mtime -1 -print0 | xargs -0 tar -rf public_html_2013-09-03.tar
tar -xf public_html_2013-09-03.tar
7z a -r -t7z -m0=lzma -mx=9 /local-storage/public_html_2013-09-03.7z local-storage
rm -rf local-storage public_html_2013-09-03.tar

Essa é a ideia básica. Observe o -r passado para 7z . Você pode aprimorar isso com um melhor gerenciamento de diretório temporário, gerando uma string de data automaticamente e assim por diante.

    
por 03.09.2013 / 20:52
0

Obrigado a todos pela sua contribuição. Eu encontrei um método que, embora não seja ótimo, funciona para mim na minha situação. Eu usei algumas ideias de pôsteres aqui e criei o seguinte script bash.

#!/bin/bash
TIMESINCELINUXSTART="$(date +%s)"
YESTERDAY='date -d "1 days ago" '+%Y-%m-%d''
cd /local-storage/public_html/
/usr/bin/find . -type f -size -25M -mtime -1 > /tmp/"$TIMESINCELINUXSTART"-changed-files.txt
/bin/mkdir -p /tmp/"$TIMESINCELINUXSTART"/public_html
/usr/bin/rsync --files-from=/tmp/"$TIMESINCELINUXSTART"-changed-files.txt /local-storage/public_html /tmp/"$TIMESINCELINUXSTART"/public_html/
/usr/bin/7z a -t7z -m0=lzma -mx=9 /local-storage/snapshots/public_html-changes-during-"$YESTERDAY".7z /tmp/"$TIMESINCELINUXSTART"/public_html
/bin/rm /tmp/"$TIMESINCELINUXSTART"-changed-files.txt
/bin/rm -rf /tmp/"$TIMESINCELINUXSTART"

Se alguém tiver melhorias ou comentários sobre isso, você está convidado a comentar. A única adição que eu gostaria de adicionar para não criar um arquivo 7zip se nenhum arquivo alterado for encontrado.

    
por 04.09.2013 / 08:51