Answers:
好吧,假设您拥有stat
和bash
,则可以通过以下方式获取文件大小:
stat -c %s your_file
如果要使用提取该$amount
文件的最后一个字节dd
,可以:
dd if=your_file of=extracted_part \
bs=1 count=$amount \
skip=$(( $(stat -c %s your_file) - $amount ))
但是更明智的方法是使用tail
:
tail -c $(( 1024*1024 )) your_file > target_file
-c
选择head
?
dd-帮助 用法:dd [OPERAND] ... 或:dd OPTION 复制文件,然后根据操作数进行转换和格式化。 bs = BYTES一次读取和写入BYTES字节(另请参见ibs =,obs =) cbs = BYTES一次转换BYTES字节 conv = CONVS根据逗号分隔的符号列表转换文件 count = BLOCKS仅复制BLOCKS输入块 ibs = BYTES一次读取BYTES字节(缺省值:512) if = FILE从FILE而不是stdin中读取 iflag = FLAGS按照逗号分隔符号列表读取 obs = BYTES一次写入BYTES字节(默认值:512) of = FILE写入FILE而不是stdout oflag = FLAGS按照逗号分隔的符号列表进行写入 seek = BLOCKS在输出开始时跳过块大小超出块的块 skip = BLOCKS在输入开始时跳过ibs大小的块 status = noxfer抑制传输统计信息 BLOCKS和BYTES后面可以跟以下乘法后缀: c = 1,w = 2,b = 512,kB = 1000,K = 1024,MB = 1000 * 1000,M = 1024 * 1024,xM = M T,P,E,Z,Y的GB = 1000 * 1000 * 1000,G = 1024 * 1024 * 1024等。
如果文件大小恰好是10MB,则1024 * 10 10240K这将保留最后一个1024K。您应该使用ibs和obs选项指定要使用的块大小。
1M = 1024K
1024*9 = 9216
dd if=/10/MB/file of=/9/MB/file count=9216K ibs=1K obs=1K
dd if=/10/MB/file of=/9/MB/file count=9M ibs=1M obs=1M
您也可以跳过文件的前1MB,使用跳过选项将跳过前1MB的内容读到文件末尾。
dd if=/10/MB/file of=/9/MB/file skip=1M ibs=1M obs=1M
使用seek选项,您可以将a写入输出文件中的特定位置。假设您要保留前1MB,然后覆盖后8MB。
dd if=/10/MB/file of=/9/MB/file skip=1M seek=1M count=8M ibs=1M obs=1M
您可能需要获取有关文件大小的一些详细信息,以确保输入和输出正确数量的数据。
ls -s --block-size 1K ./my/10MB/file
人ls --block-size =大小 使用SIZE个字节的块。请参阅下面的SIZE格式 -s,-大小 以块为单位打印每个文件的分配大小 SIZE可以是(或可以是整数,可选地后跟)以下之一: 降低:KB 1000,K 1024,MB 1000 * 1000,M 1024 * 1024等,对于G,T, P,E,Z,Y。