新しいファイルにコピーせずにファイルを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#コードでこの問題を解決する最後のチャンスかもしれません。何か案は
3 に答える
自分で書いてください。
ファイル#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で提供できるものに近づくことができます。
@ 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に結合します
処理を簡素化するためにこれらのファイルをマージしたいと思いますよね?これが目標である場合、それを行うためのはるかに効率的な方法は、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を使用して使用できると思います(ただし、完全に間違っている可能性があります)