php - Linux 如何在后台进程中依次运行 cat 和 unlink

标签 php linux unix merge background-process

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

(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 还没有完成并且它已经删除了这些片段,那么它就不会生成一个完整的文件。 那么猫吃完了怎么开始unlink呢?

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

最佳答案

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

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

这是基本的 DRY(不要重复自己)内容。如果 unlink 确实一次只获取一个文件,请使用 for 循环(但是,为什么不使用 rm 而不是 取消链接?)。如果名称包含空格,请使用数组。仍然干!

catunlink 之间的分号确保顺序执行;连接完成后才会开始取消链接。您无需执行任何其他操作。

如果你在后台单独运行 cat,你会遇到问题:

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

关于php - Linux 如何在后台进程中依次运行 cat 和 unlink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14589603/

相关文章:

javascript - 如何使用 Ajax 在 php while 循环中运行 SQL 查询?

linux - 屏蔽 DMA 分配内存的物理地址是否有效?

linux - Vim 警告 : Output is not to a terminal

linux - URL与端口号的连通性测试

c - 系统范围页表

php - API认证困惑

php - 重置密码时避免出现 "auto login"

php - mysql多列搜索

Yii 使用 Gii 的 Linux 权限问题

子进程可以在 C、Unix 中执行 waitpid() 和 wait()