我有多个文件块应该合并到一个文件中,完成后我想删除这些文件。我怎样才能做到这一点? 我试过了
(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中运行它;我需要它在后台进程中运行,以便用户体验流畅(文件上传后,用户可以在文件合并时移动到不同的页面)
答案 0 :(得分: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!!
答案 1 :(得分: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