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