有没有办法让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。