2011-03-28 64 views
1

操作系統:Linux如何分割大文件,並且在每個分割執行命令,因爲它完成

所以我有一個情況我採用分體式,然後按通常有超過30 GB的我就2GB拆分GZ文件每個分成S3。

不幸的是,現在我運行拆分,然後當它完成時我並行移動每個拆分。

我想分割,第一部分文件完成寫入後,執行push命令並對每個零件文件執行相同的操作。這將節省我的時間分配,並減少我淹沒系統輸出頻段的時間。

無論如何,我尋找--exec或類似的東西在拆分,它只是不存在。我可以並且會寫一個腳本來觀察拆分目錄並採取相應的行動,但我想我會問,如果任何人有一個命令已經這樣做,我只是不知道。

在此先感謝。

+2

屬於http://unix.stackexchange.com – 2011-03-28 21:12:53

回答

1

你可以使用一個循環使用dd

#gen a test file 
dd if=/dev/urandom bs=1K count=1024 of=test.bin 
sourcefile="test.bin" 

這應該很容易scriptified(bash的假設):

bsize=$((128*1024)) 
flength=$(stat --printf=%s "$sourcefile") 
for i in $(seq 0 $((($flength-1)/$bsize))); do dd if="$sourcefile" bs=$bsize skip=$i count=1 2>/dev/null; done | md5sum 

# verify  
md5sum "$sourcefile" 

for i in $(seq $RANDOM); do echo hello >> "$sourcefile"; done 
flength=$(stat --printf=%s "$sourcefile") 
for i in $(seq 0 $((($flength-1)/$bsize))); do dd if="$sourcefile" bs=$bsize skip=$i count=1 2>/dev/null; done | md5sum 

# verify  
md5sum "$sourcefile" 

在我的系統中,這工作就像一個魅力,產生以下輸出

1024+0 records in 
1024+0 records out 
1048576 bytes (1.0 MB) copied, 0.27551 s, 3.8 MB/s 
d73c5a920dae16861983c95d8fb1e94b - 
d73c5a920dae16861983c95d8fb1e94b test.bin 
d14ae9ae62652bc7768b076226a6320a - 
d14ae9ae62652bc7768b076226a6320a test.bin 

我現在將留給您將信息傳遞給您的網絡工作的挑戰。 查看mkfifo,將每個子作業重定向到一個單獨的fifo,並且如果該作業具有任何值(通常bandwith是限制因素),那麼可以使用xargs -PN拆分並行作業。