O tar tem alguma opção onde, ao criar um arquivo, se o diretório de destino não existir, ele o cria por conta própria?
Então eu tenho pastas /1/2
, mas não tenho pasta /1/2/3/
. Existe alguma opção que eu possa usar para o tar poder fazê-lo?
Eu preciso disso para um script, mas se não houver opção, seria melhor fazer algo assim?
mkdir /1/2/3/ &> /dev/null
Se a pasta não estiver lá, ela será criada, mas se já estiver lá, não receberei uma mensagem de erro porque coloquei tudo em null.
Agora, com este método, há ALGUMA COISA que poderia dar errado?
Basicamente, estou fazendo um script que exclui usuários, mas você pode escolher uma opção para arquivar seus diretórios pessoais antes que o script exclua o usuário. Para tornar o script utilizável em outras máquinas, tenho que criar uma pasta chamada /archives
, que pode ou não existir em outras máquinas.
Como o tar aparentemente não pode criar recursivamente qualquer caminho que você especificar para o arquivo (por exemplo, ele não pode criar /archives/users
se você escrever tar -czf /archives/users/user1.tgz /home/user1/
se /archives
não existir.
O que me leva à minha pergunta sobre minha solução: escrever mkdir -p /archives/users/ &> /dev/null
. Isso atrapalharia alguma coisa? Tenha em mente que este script só pode ser executado com sudo, pois é um script de exclusão de usuário.
Tar só pode combinar dados que estão realmente lá.
Eu acho que um método mais suave seria se você verificar de antemão se o diretório existe. O problema com seu método é que, se o diretório não puder ser criado, você não verá uma mensagem de erro.
Aqui está um exemplo de um teste :
O comportamento padrão de
tar
é criar diretórios ausentes durante a extração de arquivos.Se você usasse
cpio
em vez detar
, isso seria diferente e você precisaria darcpio
a opção-d
de dizer a ele para criar diretórios ausentes.Se você estiver no modo de criação, não há problema que possa corresponder à sua pergunta, pois não faz sentido arquivar diretórios inexistentes.