操作系统:LINUX
所以我的情况是,我通常使用超过30 GB的gz文件,使用拆分将其拆分为2GB,然后将每个拆分推送到S3。
不幸的是现在我运行拆分,然后当它完成时我会并行移动每个拆分。
我想拆分并在第一部分文件写完后立即执行push命令并对每个部件文件执行相同的操作。这样可以节省我的时间,减少我充斥系统传出频段的时间。
无论如何,我在分裂时寻找--exec或类似的东西,它就不存在了。我可以并且会编写一个脚本来观看拆分目录并采取相应行动,但我想我会问是否有人已经执行了这项我不知道的命令。
提前致谢。
答案 0 :(得分:1)
您可以使用带dd的循环
#gen a test file
dd if=/dev/urandom bs=1K count=1024 of=test.bin
sourcefile="test.bin"
这应该很容易解释(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,并且如果它具有任何值(通常带宽是限制因素),可能使用xargs -PN来分割并行作业。