让“zip”读取包含要压缩的文件路径的文本文件

让“zip”读取包含要压缩的文件路径的文本文件

有没有办法让zip命令读取文件(例如~/tmp/FilesToZip.txt)以获取要压缩的文件的路径?理想情况下,zip将把每一行解释为文件路径,其中可以包含空格。我目前实现此效果的详细方法是

cat ~/tmp/FilesToZip.txt | tr '\n' '\0' | \
   xargs -0 zip -@ ~/tmp/ZipFileName.zip

我发现了一个回答。至少有一个答案似乎表明它应该能够处理包含空格的文件名/路径,但一些评论表明并非如此。似乎如果zip从中读取文件名/路径stdin,那么它会正确地将每一行解释为文件路径,无论它是否包含空格。以下是我发现有效的方法:

# Make some folders & files whose names contain spaces
$ mkdir "Subfolder A"
$ mkdir "Subfolder B"
$ ls > Subfolder\ A/File.txt
$ ls > Subfolder\ B/File.txt
$ find Subfolder\ [AB]/* -type f > FilePaths.txt
$ cat FilePaths.txt

   Subfolder A/File.txt
   Subfolder B/File.txt

$ zip Test.zip [email protected]  #  DOESNT WORK

   zip error: Invalid command arguments (nothing to select from)

$ zip Test.zip -@ < FilePaths.txt  #  WORKS

   adding: Subfolder A/File.txt (deflated 59%)
   adding: Subfolder B/File.txt (deflated 59%)

$ cat FilePaths.txt | zip Test.zip -@  #  WORKS

   updating: Subfolder A/File.txt (deflated 59%)
   updating: Subfolder B/File.txt (deflated 59%)

$ zip Test.zip -@ FilePaths.txt  # DOESN'T WORK

   Waits for keyboard input!

由于该信息来自之前发布的问题,我想知道是否应该删除该问题,或者它是否提供了足够的确认测试价值以供保留。

答案1

使用文件列表选项:

zip ... -@ filelist.txt ...

编辑:是的,这取决于操作系统,每个操作系统上的 zip 都不同。因此您应该使用:

zip archive -@ < filelist.txt

您可以在中间-@放置其他选项。

将从<以下文件获取输入并将其提供给 zip。

相关内容