Pergunta

Cenário: Eu tenho um diretório em um servidor que hospeda meu site que contém centenas de imagens substituídas pelo usuário. Estou criando um script de backup que pega todas as imagens do diretório e as comprime para um arquivo .tar.gz. O comando que tenho até agora é:

Tar -czpf /path/to/backups/my_backup.tar.gz caminho/para/imagens/

Problema: Não dentro do meu caminho/para/imagens/eu tenho um diretório chamado TMP/. Quando executo o comando, recebo um arquivo .tar.gz contendo toda a imagem no caminho/para/imagens/diretório e um subdiretório chamado tmp/.

Pergunta: Como posso obter o comando para pular/ não incluir o TMP/ subdiretório no arquivo .tar.gz.

Obrigado um milhão de antecedência.

Foi útil?

Solução

Você está procurando o --exclude argumento.

--exclude=PATTERN

Alguns usuários encontram exclude opções confusas. Aqui estão algumas armadilhas comuns:

  • O principal modo de operação de tar não age em um nome de caminho listado explicitamente na linha de comando se um dos componentes do nome do arquivo for excluído. No exemplo acima, se você criar um arquivo e excluir arquivos que terminam com *.o, mas nomeie explicitamente o arquivo dir.o/foo Depois que todas as opções foram listadas,dir.o/foo será excluído do arquivo.

  • Às vezes, você pode confundir os significados de --exclude=PATTERN e--exclude-from=FILE-OF-PATTERNS (-X FILE-OF-PATTERNS). Tenha cuidado: use --exclude=PATTERN Quando os arquivos a serem excluídos são fornecidos como um padrão na linha de comando. Usar--exclude-from=FILE-OF-PATTERNS para introduzir o nome de um arquivo que contém uma lista de padrões, um por linha; Cada um desses padrões pode excluir zero, um ou muitos arquivos.

  • Quando você usa --exclude=PATTERN, certifique -se de citar o parâmetro do padrão, então GNU tar vê personagens curinga como *. Se você não fizer isso, o shell poderá expandir o * próprio usando arquivos em mãos, então tar Pode receber uma lista de arquivos em vez de um padrão, ou nenhum, tornando o comando um pouco ilegal. Isso pode não corresponder ao que você deseja.

Por exemplo, escreva:

$ tar -c -f ARCHIVE.TAR --exclude '*.o' DIRECTORY

ao invés de:

$ tar -c -f ARCHIVE.TAR --exclude *.o DIRECTORY
  • Você deve usar sintaxe de shell, ou globbing, em vez de regexpSintaxe, ao usar as opções de exclusão em tar. Se você tentar usarregexp Sintaxe Para descrever os arquivos a serem excluídos, seu comando pode falhar.

Outras dicas

tar -czpf /path/to/backups/my_backup.tar.gz --exclude path/to/images/tmp path/to/images/

Isso deve funcionar (assumindo GNU tar):

tar -czpf /path/to/backups/my_backup.tar.gz --exclude=tmp path/to/images/
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top