Estou procurando uma maneira de criar um arquivo .tar.gz
de um diretório, mas tenho algumas dúvidas. Eu sei que o comando para criar o arquivo é:
tar -zcvf /path/to/compressed/file.tar.gz /path/to/compress
E então eu vou conseguir um file.tar.gz
, mas isso mantém o caminho para as fontes originais. Então é isso que estou procurando:
- Deve ser compactado como
.tar.gz
- Se for possível não deve manter o caminho para o diretório compactado Quer dizer, eu só preciso do diretório de compactação e seu conteúdo.Se eu descompactar o arquivo no Windows, por exemplo, eu vou receber
/path[folder]/to[folder]/compress[folder+content]
e eu só quero o mais recente
-
Se for possível, posso omitir alguns diretórios? Exemplo eu gosto de compactar a pasta app/
e seu conteúdo é:
drwxrwxr-x 6 ubuntu ubuntu 4096 Feb 24 14:48 ./
drwxr-xr-x 10 ubuntu ubuntu 4096 Feb 26 22:33 ../
-rw-rw-r-- 1 ubuntu ubuntu 141 Jan 29 06:07 AppCache.php
-rw-rw-r-- 1 ubuntu ubuntu 2040 Feb 24 14:48 AppKernel.php
-rw-rw-r-- 1 ubuntu ubuntu 267 Jan 29 06:07 autoload.php
-rw-r--r-- 1 root root 94101 Feb 19 21:09 bootstrap.php.cache
drwxrwxrwx 4 ubuntu ubuntu 4096 Feb 25 16:44 cache/
-rw-rw-r-- 1 ubuntu ubuntu 3958 Feb 24 14:48 check.php
drwxrwxr-x 2 ubuntu ubuntu 4096 Feb 24 14:48 config/
-rwxrwxr-x 1 ubuntu ubuntu 867 Jan 29 06:07 console*
-rw-rw-r-- 1 ubuntu ubuntu 6148 Jan 29 06:07 .DS_Store
-rw-rw-r-- 1 ubuntu ubuntu 143 Jan 29 06:07 .htaccess
drwxrwxrwx 2 ubuntu ubuntu 4096 Feb 24 14:48 logs/
-rw-rw-r-- 1 ubuntu ubuntu 1118 Jan 29 06:07 phpunit.xml.dist
drwxrwxr-x 5 ubuntu ubuntu 4096 Jan 29 06:07 Resources/
-rw-rw-r-- 1 ubuntu ubuntu 30404 Feb 24 14:48 SymfonyRequirements.php
Mas eu quero deixar de fora cache/
, logs/
diretórios e bootstrap.php.cache
arquivo, como? Isso é possível?
-
Eu preciso acrescentar a data atual (DD / MM / AAAA-H: M: S) ao nome do arquivo, como?
Posso obter algum conselho ou ajuda sobre isso? Estou planejando adicionar isso a um script Bash para que ele funcione como um script bash e não como uma linha de comando
Atualização: teste dentro do script
Seguindo sugestão @Ariel , adicionei esta linha a um script bash:
read -e -p "Enter the directory to compress: " -i "/var/www/html/" directory
read -e -p "Enter the filename: " filename
FILENAME = "$filename-'date +%d-%m-%Y-%X'.tgz"
cd "$directory"
tar -zcvf /home/$FILENAME --exclude cache --exclude logs --exclude bootstrap.php.cache --exclude composer.lock --exclude vendor
Mas estou recebendo este erro:
Enter the directory to compress: /var/www/html/lynxoft/apps/checkengine/
Enter the filename: checkengine
/usr/local/bin/script-task: line 109: FILENAME: command not found
tar: Cowardly refusing to create an empty archive
Por que FILENAME
é tratado como um comando e não como var como docs diz?
Atualização 2: ainda compactando todo o caminho
Eu consertei alguns problemas graças aos comentários dos usuários e as linhas no script se parecem com isso:
read -e -p "Enter the directory to compress: " -i "/var/www/html/" directory
read -e -p "Enter the filename: " filename
FILENAME="$filename"-$(date +%d-%m-%Y-%T).tgz
cd "$directory/.."
tar -zcvf /home/$FILENAME "$directory" --exclude="*cache*" --exclude=logs --exclude=bootstrap.php.cache --exclude=composer.lock --exclude=vendor --exclude=.git
O único problema remanescente é que o arquivo compactado ainda tem o caminho completo e não apenas o diretório final. Por exemplo:
Enter the directory to compress: /var/www/html/lynxoft/apps/checkengine/
Enter the filename: file
Isso resulta em file-28-02-2015-17:44:32.tgz
, mas o conteúdo dentro do arquivo compactado ainda tem o caminho inteiro /var/www/html/lynxoft/apps/checkengine/
, por quê?