2

新しいファイルにコピーせずにファイルを1つに結合するにはどうすればよいですか?
ソース:file.dd.001、file.dd.002、file.dd.003、file.dd.004
を持っています...タスク:600ファイル(1.5 Gb)を持っています。これらすべてのファイルの容量:約900GB。HDD容量:1.5TB。新しいファイルにコピーするHDD容量(十分な空き容量がない)のため、Total Commander、7-zip、またはWinRARでこれらのファイルを結合できません。
必要性:ファイルを結合します。手順を数回実行しますが、
1)最初の100個のファイル(150 GB)を結合します。分割されたファイルを削除します(最初の100)。
2)次の100個のファイルをこのマージされたファイル(150 GB)に結​​合します。これらの100個のファイルを削除します。
3)次の100個のファイルをマージされたファイル(300 GB)に参加させます...
質問:ファイルを新しいより大きなファイルにマージ(結合)できるようにする方法を誰かに教えてもらえますか?ソフトウェアが存在するか、C#コードでこの問題を解決する最後のチャンスかもしれません。何か案は

4

3 に答える 3

4

自分で書いてください。

ファイル#1を開きます。終わらせよう。ファイル#2を開き、内容の読み取りとファイル#1への追加を開始します。

完了したら、ファイル#2を削除し、ファイル#3に進みます。

妥当なスクリプト言語では10行未満である必要があります。

Windowsについてはわかりませんが、UNIXでは次のことができます。

for num in `seq -w 2 600`; do
    cat file.dd.$num >> file.dd.001
    rm file.dd.$num
done

追加>>出力リダイレクトの使用に注意してください。

ddゼロコピー転送を使用する代わりにを使用することで、おそらく高速化できますcat(つまり、ファイルをメモリに読み込んで出力ストリームに書き込む代わりに、カーネルに作業を任せます)。

 dd if=file.dd.$num of=file.dd.001 conv=notrunc oflag=append bs=10M

これにより、ハードディスクがIOで提供できるものに近づくことができます。

于 2012-09-09T12:51:08.270 に答える
1

@ Anony-Mousseの便利なLinuxコードサンプルのおかげで
問題は解決しました…<br/>Windowsにはcmdコマンドがあります。これは、HarlanHarveyの著書WindowsForensic Analysis Dvd Toolkit 2E(2009)のページにあります。448:

D:\Images>type image.001 >  image_all.img
D:\Images>type image.002 >> image_all.img
D:\Images>type image.002 >> image_all.img

ファイル300Gb(image_all.img)があり、それに50ファイル(1.5 Gb)を結合する必要がある場合は、次のものが必要です。

D:\Images>type image.200 >> image_all.img
D:\Images>type image.201 >> image_all.img
D:\Images>type image.202 >> image_all.img
D:\Images>type image.203 >> image_all.img
….
D:\Images>type image.498 >> image_all.img
D:\Images>type image.499 >> image_all.img

または、より良い:

D:\Images>type image.* >> image_all.img

フォルダー内のすべてのファイル(マスク付き)をファイルimage_all.imgに結合します

于 2012-09-13T14:11:54.850 に答える
0

処理を簡素化するためにこれらのファイルをマージしたいと思いますよね?これが目標である場合、それを行うためのはるかに効率的な方法は、FIFOファイルを使用することです。* nix(linux、macos、* bsdなど)では、次のようにmkfifoコマンドを使用して、すべてのファイルを「表す」FIFOファイルを作成できます。

mkfifo mybigfile
cat file.dd.* > mybigfile &
{{process}} mybigfile

ファイルmybigfileには、file.dd。{001,002,003 ...}ファイルのすべての内容が含まれ、これらすべてのファイルを1つの大きなファイルとして処理できます。プロセスがファイルの読み取りを完了すると、mybigfileは空になり、「補充」するには、「 catfile.dd。*> mybigfile&」コマンドを実行する必要があります。

さて、元の質問には多数のMicrosoft Windowsリファレンス(C#、winrar、およびTotal Commander)が含まれているため、作成者にはWindowsソリューションが必要だと思います。私はWindowsの人ではありませんが、上記はcygwinの下で、または名前付きパイプとPowerShellを使用して使用できると思います(ただし、完全に間違っている可能性があります)

于 2017-02-04T12:26:09.573 に答える