Problema com o find excluindo arquivos do tipo socket ao criar um arquivo tar

0

Estou tentando fazer um arquivo tar de todos os arquivos no meu diretório /var . Naturalmente, eu quero excluir os soquetes do Unix lá.

Então, eu tento um comando que se parece com algo como:

sudo find /var \! -type s -exec tar -rf ~/test/etc.tar {} \;

Mas isso gera a mensagem de erro repetida

tar format cannot archive socket:

Quando tento fazer uma cópia em vez de tar, recebo um erro semelhante:

cp: ./var/run/devd.pipe is a socket (not copied).

Alguém tem uma idéia por que find não consegue excluir arquivos do tipo socket? É capaz de excluir, por exemplo, arquivos do diretório de tipos.

    
por Yogesch 26.11.2018 / 12:16

1 resposta

2

Você também terá que excluir diretórios. Se não estiver excluindo diretórios, tar receberá /var (e outros diretórios) como argumento e continuará arquivando-os com todo o conteúdo (soquetes ou não). Além disso, ele adicionará várias cópias de muitos arquivos devido ao mesmo motivo ( /var inclui /var/log/messages e o mesmo /var/log ).

find /var ! -type s ! -type d -exec tar -r -f archive.tar {} +

Ou, se você quiser apenas arquivos regulares e links simbólicos:

find /var '(' -type f -o -type l ')' -exec tar -r -f archive.tar {} +

Eu escolhi usar -exec ... {} + aqui em vez de -exec ... {} ';' , já que provavelmente queremos chamar tar o menor número de vezes possível com o maior número de argumentos possível de cada vez.

    
por 26.11.2018 / 12:21

Tags