Como usar o Linux zip para sincronizar arquivos

0

Eu quero "sincronizar" meus arquivos com o zip, criando novos, atualizando os novos e excluindo os do zip que não existem mais.

Quando usei -du , vejo

zip error: Invalid command arguments (specify just one action)

Qual é a melhor maneira de fazer isso?

    
por Paul Draper 26.05.2014 / 09:54

2 respostas

1

Confira fuse-zip . A partir da descrição do projeto:

fuse-zip is a FUSE file system to navigate, extract, create and modify ZIP archives based in libzip implemented in C++.

With fuse-zip you really can work with ZIP archives as real directories. Unlike KIO or Gnome VFS, it can be used in any application without modifications.

Isso possibilita "montar" um arquivo zip em algum diretório. Veja a documentação para obter exemplos.

    
por 27.05.2014 / 14:33
0

Acho que a melhor maneira de fazer isso é excluir o arquivo inteiro e fechar o diretório novamente.

O parâmetro '-d' espera que o caminho relativo do arquivo exclua arquivos do zip. A opção '-u' adiciona (ou atualiza) novos arquivos ao zip. Eles não podem ser usados juntos.

Não tenho certeza se você pode fazer a atualização / exclusão facilmente usando o comando zip. No entanto, eu escrevi um script simples abaixo, que pode fazer o que quiser. Sinta-se à vontade para editar o script - por enquanto ele requer que o arquivo e o diretório que você deseja zip / update esteja no mesmo lugar (por exemplo /home/you/archive.zip e / home / you / directory_to_zip. não adiciona diretórios vazios ao zip.

#!/bin/bash

archive="archive_name.zip"
directory="dir_to_zip"

#Get list of files in archive
filesinarchive='unzip -l $archive | sed 's/[ ][ ]*/ /g' | grep 2014 | cut -d" " -f 5 | sort'

#Uncomment when debugging
#echo -e "Files in archive:\n$filesinarchive"

#Get list of files in directory..
filesindirectory='find $directory/ -type f | sort'

#Uncomment when debugging
#echo -e "\n\nFiles in Directory:\n$filesindirectory"

#Save the lists to tmp files..
echo "$filesinarchive" > /tmp/fia
echo "$filesindirectory" > /tmp/fid


#Compare file lists and return the files present in archive and NOT present in directory
remove=$(comm -1 -3 /tmp/fid /tmp/fia)

#Uncomment when debugging
#echo -e "\n\n\n Files to be deleted:\n$remove \n\n"


#Now delete these files from zip
for file in $remove
do
        zip -d $archive $file
done


#We have deleted files which were not present in the directory, now we need to update our zip:
zip -R -u $archive $filesindirectory

#delete temp files
rm -f /tmp/fia /tmp/fid

Salve o conteúdo acima no arquivo chamado zipsync.sh, dê a ele permissões de execução (chmod + x zipsync) e execute quando estiver no diretório com o arquivo e o diretório para zip.

Você pode modificar o script para que ele possa usar caminhos não relativos e / ou zipar diretórios vazios.

Espero que isso ajude um pouco.

    
por 26.05.2014 / 13:09

Tags