0

1つのファイルにマージする必要のあるファイルのチャンクが複数あります。マージが完了したら、それらの部分を削除したいと思います。どうすればそれを達成できますか?私は試した

(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;) &

それはヒットとミスのようなものです。つまり、猫がまだ完成しておらず、すでにピースが削除されている場合、完全なファイルは作成されません。では、猫が終わった後、どうすればリンク解除を開始できますか?

このコマンドは、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 (Don't Repeat Yourself) です。unlink一度に 1 つのファイルしか取得しない場合は、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 に答える