Tar compacta a pasta sem especificar o nome do arquivo

4

É possível usar tar para compactar uma pasta sem fornecer o nome do arquivo a ser armazenado?

Normalmente você usa:

tar -zcvf prog-1-jan-2005.tar.gz /home/jerry/prog

Eu quero fazer algo como

tar -zcvf /home/jerry/prog

e crie um prog.tar.gz

    
por Mark Robinson 06.03.2014 / 14:03

3 respostas

4

Você não pode usar tar dessa maneira. Ou você precisa corrigir isso.

Se você não der um arquivo (você não usa a opção -f ), tar usará a saída padrão por padrão, ou seja, o terminal e eventualmente falhará porque se recusará a gravar dados compactados o terminal.

Então, você precisa chamar tar da maneira correta: tar -zcvf prog.tag.gz /home/jerry/prog .

    
por 06.03.2014 / 14:10
2

até onde eu sei, isso não é possível, principalmente porque o argumento "destination name" vem primeiro. Se você omitir, então o argumento "source" é colocado ao invés do destino e confunde tar.

Se as suas necessidades forem de um script em que você não saiba o nome do arquivo a ser criado, você poderá considerar a análise do caminho e criar um nome para fornecer ao comando tar.

    
por 06.03.2014 / 14:10
0

Com base na sugestão do @ Laurent, eu escrevi este script:

#!/bin/bash

function isIn()
{
if [ -z "$1" ]; then
    return
fi

for i in "${EXPECTED_ARGS[@]}"; do
    if [ "$i" == "$1" ];then
        return 1
    fi
done

return 0
}
EXPECTED_ARGS=( 1 )
E_BADARGS=65

if isIn $# ; then
  echo "Usage: $0 filepath"
  exit $E_BADARGS
fi

FILEPATH=${1%/}
filename="${FILEPATH##*/}"

tar -zcvf "$filename.tar.gz" "$FILEPATH"

Eu sou novo nisso, então se você ver algo errado, por favor contribua.

    
por 07.03.2014 / 00:30