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.
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?
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 .
Tags tar