Como uso o tar para excluir todos os arquivos de um determinado diretório?

6

Um cliente faz o upload de arquivos para um servidor de desenvolvimento. Quando chegar o momento de fazer o upload do projeto para um servidor de produção, esses arquivos não serão mais necessários e gostaríamos de excluí-los do arquivo tar que, por fim, enviaremos para a produção. No entanto, nós ainda queremos manter o diretório intacto, são apenas os arquivos que não são necessários

Usando o Ubuntu 16 e o tar 1.28, tentamos:

tar -vczf archive.tar.gz . --exclude=wp-content/uploads/wpallimport/files/*
tar: Cowardly refusing to create an empty archive

Também tentamos incluir o parâmetro exclude = em cotações simples e duplas, sem sorte.

tar -vczf archive.tar.gz . --exclude='wp-content/uploads/wpallimport/files/*'
tar: Cowardly refusing to create an empty archive

O site oficial mostra --exclua sem sinal de igual

tar -vczf file.tar.gz --exclude 'directory/*' . e apresenta o mesmo erro.

Como isso é feito?

    
por user658182 11.08.2016 / 18:46

2 respostas

6

A pegadinha usual com a opção tar --exclude é que ela é relativa ao argumento do diretório dado

$ tree dir
dir
└── subdir
    └── subsubdir
        ├── file1
        ├── file2
        └── file3

2 directories, 3 files

então

$ tar cvf dir.tar.gz --exclude='/dir/subdir/subsubdir/*' dir
dir/
dir/subdir/
dir/subdir/subsubdir/
dir/subdir/subsubdir/file1
dir/subdir/subsubdir/file2
dir/subdir/subsubdir/file3

falha ao excluir o conteúdo de subsubdir (está tentando excluir dir/dir/subdir/subsubdir/* , que não corresponde a nada); o que você quer é

$ tar cvf dir.tar.gz --exclude='subdir/subsubdir/*' dir
dir/
dir/subdir/
dir/subdir/subsubdir/

AFAIK a ordem não importa, exceto que o arquivo de saída deve seguir imediatamente a opção f .

    
por steeldriver 11.08.2016 / 19:08
1

Digamos que você tenha um diretório chamado "top-dir" com subpastas "dir / subdir". Se você quiser excluir o conteúdo de um diretório "dir / subdir", mas não o próprio diretório, a linha de comando que realmente funciona é tar -zcp --exclude='dir/subdir/*' -f archive.tgz top-dir .

Você precisa usar a opção -f após o --exclude e antes do nome do arquivo.

    
por Jacques 28.12.2017 / 17:33

Tags