Mat*_*Mat 34
好吧,假设您有stat
和bash
,您可以通过以下方式获取文件大小:
stat -c %s your_file
Run Code Online (Sandbox Code Playgroud)
如果您想使用 提取该$amount
文件的最后一个字节dd
,您可以:
dd if=your_file of=extracted_part \
bs=1 count=$amount \
skip=$(( $(stat -c %s your_file) - $amount ))
Run Code Online (Sandbox Code Playgroud)
但更明智的方法是使用tail
:
tail -c $(( 1024*1024 )) your_file > target_file
Run Code Online (Sandbox Code Playgroud)
dd --help 用法:dd [操作数]... 或:dd 选项 复制文件,根据操作数进行转换和格式化。 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 在输出开始时跳过 BLOCKS 个 obs 大小的块 skip=BLOCKS 在输入开始时跳过 BLOCKS ibs 大小的块 status=noxfer 抑制传输统计 BLOCKS 和 BYTES 后面可以跟以下乘法后缀: c =1, w =2, b =512, kB =1000, K =1024, MB =1000*1000, M =1024*1024, xM =M GB =1000*1000*1000,G =1024*1024*1024,T、P、E、Z、Y依此类推。
如果文件大小正好是10MB, 1024*10 10240K 这会留下最后的1024K。您应该使用 ibs 和 obs 选项指定您正在使用的块大小。
1M = 1024K
1024*9 = 9216
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
您还可以跳过文件的前 1MB,使用跳过选项跳过前 1MB 读取到文件的末尾。
dd if=/10/MB/file of=/9/MB/file skip=1M ibs=1M obs=1M
Run Code Online (Sandbox Code Playgroud)
使用 seek 选项,您可以将 a 写入输出文件中的特定位置。假设您要保留前 1MB 并覆盖最后 8MB。
dd if=/10/MB/file of=/9/MB/file skip=1M seek=1M count=8M ibs=1M obs=1M
Run Code Online (Sandbox Code Playgroud)
您可能需要获取有关文件大小的一些详细信息,以确保输入和输出的数据量正确。
ls -s --block-size 1K ./my/10MB/file
Run Code Online (Sandbox Code Playgroud)
男人 --block-size=SIZE 使用 SIZE 字节的块。请参阅下面的 SIZE 格式 -s, --size 打印每个文件的分配大小,以块为单位 SIZE 可以是(或者可以是一个可选的整数)以下之一? 降低:KB 1000、K 1024、MB 1000*1000、M 1024*1024 等,G、T、 P、E、Z、Y。