【问题标题】:Is there anyway to detect unix command "cat" finish merging files?有没有办法检测unix命令“cat”完成合并文件?
【发布时间】:2013-03-28 09:43:29
【问题描述】:

我想知道,有没有办法检测 cat 函数完成合并文件,所以我可以压缩文件? 例如,如果我有这样的简单案例,则包含多个文件的文件夹如下:

/var/www/testing/file1.iso0
/var/www/testing/file1.iso1
/var/www/testing/file1.iso2
/var/www/testing/file2.xls0
/var/www/testing/file2.xls1

基本上,使用我的网络应用程序,用户将上传 file1.iso 和 file2.xls,使用 html5 我将分割每个文件并部分上传,这将导致上述结构。在每个文件的所有部分完成上传后,我将使用 ajax 调用使用 cat unix 命令合并文件。

$command = '(files=(' . $list_file_copy . '); cat ' . '"${files[@]}" > ' . '"' . $file_name . '"' . '; rm ' . '"${files[@]}")';

类似的东西。

exec($cmd . " > /dev/null &");

我的问题是我怎么知道 file1.iso 和 file2.xls 完成合并,所以我可以发送另一个命令来压缩文件?比如file1.iso和file2.xls变成filexxx.zip。

请注意,文件可以是多个,每个单独的文件可以很大(我会说最多 4GB,这就是为什么将 100MB 分成小部分的原因)

【问题讨论】:

  • cat foo >> bar && baz - && 在运行下一个命令之前等待上一个命令完成。不知道有没有更精细的方法?
  • @Emissary 但同时,我不希望上传文件的用户等待文件完成合并和压缩。它必须在后台运行,因此在文件部分完成上传并到达服务器后,用户可以注销或执行其他任何操作。而不是等待合并和压缩
  • 可能在合并文件中使用某种命名约定,然后让一些 cron 命令定期扫描与指定名称/模式匹配的文件并压缩它们。可以肯定的是,在 cat 命令完成之前,合并的文件不会被写入文件系统。
  • @Emissary 否,合并文件将在 cat 命令启动后立即写入文件系统。然后只是文件大小会不断增加,直到完成
  • 我刚刚测试过——认为你是对的。您是否可以然后 cat foo > bar && echo '[filename]' >> logfile 然后让您的 cron 脚本读取已完成合并的日志文件?

标签: php unix file-upload zip


【解决方案1】:

您可以尝试检查退出代码....... 当命令完成时,它会向操作系统返回成功/失败指示符或调用 prog....

在shell中测试$的值? (会给你最后执行的命令的退出代码),如果成功,它将返回 0 作为退出代码 - 执行 zip,否则根据需要抛出警告或错误。

我在很多脚本中都这样做。 希望这会有所帮助

【讨论】:

  • 在这种情况下,由于命令执行正确,该命令将始终为0,但这并不意味着合并过程完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 2015-04-18
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多