cat filenames.txt
Document a.txt
Document b.txt
Document c.txt
因为我需要tar三个文件,所以我使用命令行
tar -cvzf backup.tar.gz "Document a.txt" "Document b.txt" "Document c.txt"
为了做到这一点:
cat filenames.txt | awk '{ how to add " "double quatation mark to file names}' | xargs tar -cvzf backup.tar.gz
问题: 1.如何为awk {...}编写代码?感谢。
2.When()包含在文件名中,为什么tar命令不起作用?如何使用tar处理特殊字符?
答案 0 :(得分:3)
您可以使用-T
将文件传递给tar命令
然后它将读取文件并在其中添加所有文件。
tar -cvzf backup.tar.gz -T filenames.txt
实施例
$cat filenames.txt
Document a.txt
Document b.txt
Document c.txt
$tar -cvzf backup.tar.gz -T filenames.txt
Document a.txt
Document b.txt
Document c.txt
$tar -tvf backup.tar.gz
-rw-r--r-- me 4 2015-01-23 08:32 Document a.txt
-rw-r--r-- me 4 2015-01-23 08:32 Document b.txt
-rw-r--r-- me 4 2015-01-23 08:32 Document c.txt
手册页条目
-T, - files-from = FILE
获取要从FILE中提取或创建的名称
答案 1 :(得分:2)
您可以使用xargs -I
:
cat filenames.txt | xargs -I {} tar -rvf backup.tar '{}'
gzip backup.tar
答案 2 :(得分:1)
如果您需要使用awk并且指定/生成类似STRING<SPACE>STRING.txt
的文件格式,您也可以使用printf。
awk '{ printf "\"%s %s\"\n", $1, $2 }' files.txt | xargs tar -cvzf backup.tgz
AWK是处理生成的行和列的绝佳过滤器。
由于您不需要过滤数据,因此您可以按原样行。
$ awk '{ printf "%s\n", $0; }' files.txt | xargs -I {} tar -rvf backup.tar {}
Document A.txt
Document B.txt
或没有printf(整行)
$ awk '{ print; }' files.txt | xargs -I {} tar -rvf backup.tar {}
并在最后一步压缩它,gzip无法更新压缩档案:
$ gzip backup.tar