Arquivar arquivos por idade usando o comando tar

1

H Tudo,

Estou tentando arquivar arquivos com uma duração mais antiga do que a específica, quando tento descompactar o arquivo tar que mantém a estrutura de diretórios da pasta raiz. Eu não quero manter as pastas pai

comando usado:

find /home/prj/myfolder/* -mtime 1 -type f | 
    while read file; 
    do
        tar -Pcvzf archive.tar.gz --remove-files "$file"
    done

Problema: A localização do arquivo é /home/prj/myfolder/abc/a.txt quando eu descompactar arquivo.tar.gz ele contém a diretiva /home/prj/myfolder/abc/a.txt.

Estou esperando abc / a.txt

    
por Tejas 25.05.2016 / 12:45

2 respostas

4

Solte o arquivo "/ home / prj / myfolder / *" e use "cd / home / prj / myfolder /" para navegar até esse local.

cd /home/prj/myfolder/
find . -mtime 1 -type f | 
    while read file; 
    do
        tar -Pcvzf archive.tar.gz --remove-files "$file"
    done

Os arquivos serão armazenados com um caminho relativo.

    
por Rinzwind 25.05.2016 / 12:52
0

Eu usaria a solução na resposta de Rinzwind. Não há nenhum motivo real para evitar o cd ; especialmente se você colocar isso em um shell script, pois o cd afetará apenas o script, não o shell do qual você chama o script.

Se você realmente não quiser usar cd , use a opção tar s --transform :

gbl@roran:~$ tar -cf /tmp/archive.tar /home/gbl/Temp/a.out
gbl@roran:~$ tar -tf /tmp/archive.tar
home/gbl/Temp/a.out

gbl@roran:~$ tar --transform 's/^home\/gbl//' -cf /tmp/archive2.tar /home/gbl/Temp/a.out
gbl@roran:~$ tar -tf /tmp/archive2.tar
/Temp/a.out

gbl@roran:~$ tar --transform 's/^home\/gbl\///' -cf /tmp/archive3.tar /home/gbl/Temp/a.out
gbl@roran:~$ tar -tf /tmp/archive3.tar
Temp/a.out

Eu omiti algumas mensagens de tar: Removing leading '/' from member names aqui, pois elas não contribuem para a resposta.

Use qualquer expressão regular sed para a transformação, leia o manual para mais algumas opções.

Há também --strip-components para remover muitos componentes de caminho do início do nome do arquivo, mas ele funciona somente na extração, não quando você cria um arquivo.

No entanto, isso é restrito ao gnu tar, então você ficará bem no Linux, mas provavelmente não sempre que mudar para MacOS, Solaris ou AIX. Qual é outro motivo para evitá-lo, especialmente porque existe uma solução fácil e diferente ( cd first).

    
por Guntram Blohm 25.05.2016 / 17:16