0

我有多个文件应该合并到一个文件中,完成后我想删除这些文件。我怎样才能做到这一点?我试过了

(cat 511MB.zip0 511MB.zip1 511MB.zip2 511MB.zip3 511MB.zip4 511MB.zip5 > 511MB.zip; unlink 511MB.zip0; unlink 511MB.zip1; unlink 511MB.zip2; unlink 511MB.zip3; unlink 511MB.zip4; unlink 511MB.zip5;) &

像这样的东西,它是命中注定的,我的意思是如果 cat 还没有完成并且它已经删除了这些片段,那么它就不会生成一个完整的文件。那么猫完成后如何开始取消链接呢?

请注意,此命令我将使用 exec() 在 PHP 中运行它;我需要它在后台运行,以便用户体验流畅(文件上传后,用户可以在文件合并时移动到不同的页面)

4

2 回答 2

2

看在上帝的份上,使用变量:

(files="511MB.zip0 511MB.zip1 511MB.zip2 511MB.zip3 511MB.zip4 511MB.zip5"
 cat $files > 511MB.zip; unlink $files) &

这是基本的 DRY(不要重复自己)的东西。如果unlink真的一次只需要一个文件,请使用for循环(但是,为什么不使用rm而不是unlink?)。如果名称包含空格,请使用数组。还是去干!

cat和之间的分号unlink确保顺序执行;在连接完成之前,取消链接不会开始。你不需要做任何其他事情。

cat如果您在后台自行运行,您会遇到问题:

# !!BAD!!
(files="511MB.zip0 511MB.zip1 511MB.zip2 511MB.zip3 511MB.zip4 511MB.zip5"
 cat $files > 511MB.zip &
 unlink $files) &
# !!BAD!!
于 2013-01-29T18:34:59.920 回答
1

通过使用&&而不是;分隔您的命令,您可以确保在成功运行cat.

cat 511MB.zip0 511MB.zip1 511MB.zip2 511MB.zip3 511MB.zip4 511MB.zip5 > 511MB.zip && unlink 511MB.zip0 && unlink 511MB.zip1 && unlink 511MB.zip2 && unlink 511MB.zip3 && unlink 511MB.zip4 && unlink 511MB.zip5
于 2013-01-29T18:28:13.930 回答