2015-07-10 70 views
3

我需要将多个文件压缩到一个zip文件中。我需要保留zip文件中的文件的目录结构。要压缩的文件将位于具有完整路径的单独文本文件中。我将文本文件中的文件名读入一个变量并传递给zip命令。这是我使用的命令。使用空格外壳脚本压缩多个文件

zip -r $EXP_DIR/Export_files.zip $BASE_DIR -i "$file_name" 

它对单个文件工作正常。但是,当我添加多个文件失败,出现下面的错误。

zip error: Nothing to do! (zip file name) 

我不明白我在这里错过了什么。任何建议将不胜感激。

谢谢, 古纳

+0

什么是$ FILE_NAME的价值? – Hogan

+0

我读取包含要压缩的文件的文本文件,通过它循环并将其附加到file_name –

回答

2

1)myfile.txt包含由换行分隔的文件名

zip out.zip [email protected] < myfile.txt 

2)myfile.txt包含由空格分隔的文件名(没有空格允许在文件名中!)

zip out.zip [email protected] < <(tr ' ' '\n' < myfile.txt) 

来自man zip

如果指定了文件列表作为[email protected] [未在MacOS],拉链取列表输入文件的 从标准输入而不是从命令行。
例如,zip [email protected] foo将上市每标准输入行一个文件存储在foo.zip

+0

谢谢,这个作品。但唯一的问题是它不保留文件的目录结构。我需要包含目录结构的zip文件。例如,如果我的文件位于/ test/doc1/file 1.txt,/ test/doc2/file 2.txt中,则zip文件应该包含文件以及目录结构。这就是我压缩整个目录并使用-i仅包含文本文件中的文件的原因。 –

+0

@Gunasekaran:'-r'选项告诉'zip'递归到目录中。由于你所有的输入都是一系列的文件名,这个标志怎么帮助你?你需要以绝对路径存储所有文件吗? –

+0

对不起,我的错。这按预期工作。非常感谢你。 –