Remova a estrutura de pastas do arquivo morto, ignore a pasta durante o arquivamento e corrija o erro

1

Eu estou tentando fazer um script para fazer backup de cada um dos meus hosts plesk para arquivos individuais, estou tendo dois problemas:

  1. Eu gostaria de remover a estrutura de pastas do arquivo, o tar é de 3 pastas de profundidade
  2. Estou recebendo este erro: tar: Removendo o início '/' dos nomes dos membros
  3. Preciso do meu arquivo para ignorar pastas com o nome "catch" porque não preciso delas no meu arquivo.

O código:

FILES=/var/www/vhosts/*
FNAME=""
for f in $FILES
do
FNAME='basename $f'
tar cfv "/root/backup/ftp/$FNAME.tar" $f
done

Exemplo de saída:

tar: Removing leading '/' from member names
/var/www/vhosts/mydomain.com/
/var/www/vhosts/mydomain.com/conf
/var/www/vhosts/mydomain.com/etc/
/var/www/vhosts/mydomain.com/etc/group
/var/www/vhosts/mydomain.com/etc/termcap
/var/www/vhosts/mydomain.com/etc/passwd
/var/www/vhosts/mydomain.com/usr/
    
por Michael 19.10.2013 / 10:24

2 respostas

0

Como sempre, no Linux, um único comando serve:

for i in $(find /path/to/source/dir -type f -exec echo {} \;) ; do tar -c  -f path/to/dest/directory/${i##*/}.tar -C ${i%/*} ${i##*/} ; done

Certifique-se de que o diretório de origem seja especificado por meio de seu nome de caminho completo, não de um parente; o resto é óbvio, eu usei muito as capacidades de substituição de shell.

EDIT: enquanto eu estava escrevendo minha resposta, uma outra resposta afirmou que não se pode apagar a estrutura de diretórios. Isso não está correto, a opção -F no tar faz exatamente isso. Com este comando, você encontrará todos os arquivos vindos da árvore de diretórios no diretório / path / to / source /, todos apropriadamente alcatroados e empilhados ordenadamente dentro do diretório / diretório / caminho / diretório / dest /.

Editar: a alteração solicitada, ou seja, a exclusão de arquivos cujos nomes começam com captura, pode ser realizada por meio do seguinte comando:

for i in $(find /path/to/source/dir -type f ! -name 'catch*' -exec echo {} \;) ; do tar -c  -f path/to/dest/directory/${i##*/}.tar -C ${i%/*} ${i##*/} ; done

Se você quiser evitar que os arquivos terminem com o catch, suspenda o susbstitute * com * catch, tenho certeza que você entendeu.

    
por 19.10.2013 / 13:53
0

I would like to remove the folder structure from archive, the tar is 3 folders deep

você não pode. cd para o diretório de destino ou um nível acima, em seguida, execute tar em ./$ f

I am getting this error: tar: Removing leading '/' from member names

isto é um aviso e se você seguir a primeira sugestão, você não a obterá novamente

    
por 19.10.2013 / 12:33