Como usar o tar para compactar um grupo de arquivos em um arquivo .txt?

6

Tenho muitos nomes de arquivos listados em um arquivo .txt chamado to_be_archived_files.txt e seu conteúdo é:

~/Documents/dir1/a.html
~/Documents/dir1/b.html
~/Documents/dir1/c/1.html

Como adiciono todos eles em archive.tar.gz por tar ?

Eu quero algo como:

tar czf archive.tar.gz -FROM-FILELIST=to_be_archived_files.zip

Como posso conseguir isso?

    
por AGamePlayer 27.08.2015 / 10:54

2 respostas

10

Use a opção -T :

 -T, --files-from FILE
       get names to extract or create from FILE

Observe que ele não funciona com ~ como alias para o diretório inicial, você precisa especificar a pasta explicitamente.

    
por 27.08.2015 / 11:08
7

Você precisaria substituir esse ~ pelo seu diretório inicial primeiro. Supondo que o seu diretório home não contenha : (eles geralmente não o fazem, caso contrário eles não poderiam ser referenciados em /etc/passwd ):

(cd / &&
  sed "s:^~:$HOME:" | pax -w | gzip) < file.list > file.tar.gz

Ou se o seu tar é o único do GNU ou bsdtar :

(cd / &&
  sed "s:^~:$HOME:" | tar -T - -zcf -) < file.list > file.tar.gz

Alguns outros tar têm -I em vez de -T para isso. star usa um argumento list=- para isso ( star cvf - list=- ).

Note que nas soluções acima, exceto star , se algum dos arquivos da lista for do tipo diretório , todo o conteúdo desses diretórios será incluído.

Para arquivar apenas o diretório e não seu conteúdo, com pax adicione a opção -d , com o GNU tar ou bsdtar o --no-recursion one (também -n with bsdtar ). / p>

Com star , para incluir o conteúdo dos diretórios, adicione a opção -dodesc .

    
por 27.08.2015 / 11:38

Tags