Como escrever código para este cenário de arquivamento?

0

Digamos que após a primeira execução, 10 arquivos foram criados com def user id no diretório abc . Eu limpei os 10 arquivos criados por def user id em um arquivo tar com extensão de data e hora.

Agora, após a segunda execução, outros 4 arquivos foram criados por def user id para a lista no diretório abc .

Agora, quando eu tar pela segunda vez, eu não quero que os 10 primeiros arquivos sejam tarados novamente. Eu só quero adicionar os 4 arquivos recém-adicionados.

Deve haver 2 arquivos tar agora no diretório abc .

Na terceira execução, o terceiro arquivo tar deve conter apenas os arquivos recém-adicionados após a segunda execução.

Como posso fazer isso?

    
por slhck 12.07.2011 / 21:25

1 resposta

0

uma maneira simples (ish) de fazer isso requer que você tenha um arquivo sentinela inicial ou um tarball existente em seu diretório tarball. essencialmente isso apenas define a hora de início como base de nossas operações de tarball:

touch sentinel.tar

Em seguida, para distribuir os arquivos que você está procurando, basta executar isso no diretório base de sua árvore de diretórios:

find . -type f -newer $( ls -1rt *.tar | tail -1 )  \! -name '*.tar' -exec tar cavf "$( date '+%Y%m%d%H%M%S').tar" {} +

isso deve resultar em tarballs com a data / hora atual como o nome que contém todos os arquivos que foram criados desde a última vez que os arquivos foram encerrados.

exemplo:

helter@helter-desktop:~/workspace/tmp$ touch sentinel.tar
helter@helter-desktop:~/workspace/tmp$ ls -la
total 12
drwxr-xr-x  3 helter helter 4096 2011-07-12 16:18 .
drwxr-xr-x 33 helter helter 4096 2011-07-12 15:52 ..
drwxr-xr-x  2 helter helter 4096 2011-07-12 16:17 abc
-rw-r--r--  1 helter helter    0 2011-07-12 16:18 sentinel.tar

helter@helter-desktop:~/workspace/tmp$ # create some files in the abc sub dir

helter@helter-desktop:~/workspace/tmp$ touch abc/1 abc/2 abc/3

helter@helter-desktop:~/workspace/tmp$ # now tar all the files that were created after our sentinal

helter@helter-desktop:~/workspace/tmp$ find . -type f -newer $( ls -1rt *.tar | tail -1)  \! -name '*.tar' -exec tar cavf "$( date '+%Y%m%d%H%M%S').tar" {} +
./abc/3
./abc/1
./abc/2

helter@helter-desktop:~/workspace/tmp$ ls -la
total 16
drwxr-xr-x  3 helter helter 4096 2011-07-12 16:18 .
drwxr-xr-x 33 helter helter 4096 2011-07-12 15:52 ..
-rw-r--r--  1 helter helter  143 2011-07-12 16:18 20110712161854.tar
drwxr-xr-x  2 helter helter 4096 2011-07-12 16:18 abc
-rw-r--r--  1 helter helter    0 2011-07-12 16:18 sentinel.tar

helter@helter-desktop:~/workspace/tmp$ # now create some more files

helter@helter-desktop:~/workspace/tmp$ touch abc/4 abc/5 abc/6

helter@helter-desktop:~/workspace/tmp$ # and re-run the command to tar up all the new files

helter@helter-desktop:~/workspace/tmp$ find . -type f -newer $( ls -1rt *.tar | tail -1)  \! -name '*.tar' -exec tar cavf "$( date '+%Y%m%d%H%M%S').tar" {} +
./abc/6
./abc/4
./abc/5

helter@helter-desktop:~/workspace/tmp$ ls -la
total 20
drwxr-xr-x  3 helter helter 4096 2011-07-12 16:19 .
drwxr-xr-x 33 helter helter 4096 2011-07-12 15:52 ..
-rw-r--r--  1 helter helter  143 2011-07-12 16:18 20110712161854.tar
-rw-r--r--  1 helter helter  142 2011-07-12 16:19 20110712161930.tar
drwxr-xr-x  2 helter helter 4096 2011-07-12 16:19 abc
-rw-r--r--  1 helter helter    0 2011-07-12 16:18 sentinel.tar

depois que o primeiro tarball for criado, você poderá remover o arquivo sentinela. apenas certifique-se de sempre deixar o último arquivo tar que você criou no diretório raiz.

você pode contornar essas limitações / suposições com algum simples script de bash, se você não gosta da idéia de um arquivo sentinela ...

    
por 12.07.2011 / 22:24