回答:
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 [オペランド] ... または:dd OPTION ファイルをコピーし、オペランドに従って変換およびフォーマットします。 bs = BYTESは一度にBYTESバイトの読み取りと書き込みを行います(ibs =、obs =も参照) cbs = BYTESは一度にBYTESバイトを変換します conv = CONVSは、コンマ区切りの記号リストに従ってファイルを変換します count = BLOCKSは、BLOCKS入力ブロックのみをコピーします ibs = BYTESは一度にBYTESバイトを読み取ります(デフォルト:512) if = FILEはstdinではなくFILEから読み取ります iflag = FLAGSは、カンマ区切りの記号リストに従って読み取ります obs = BYTESは、一度にBYTESバイトを書き込みます(デフォルト:512) of = FILE stdoutの代わりにFILEに書き込みます 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 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
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
また、スキップオプションを使用してファイルの最初の1 MBをスキップし、最初の1 MBをスキップしてファイルの最後まで読み取ることもできます。
dd if=/10/MB/file of=/9/MB/file skip=1M ibs=1M obs=1M
シークオプションを使用すると、出力ファイルの特定の場所に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バイトのブロックを使用します。下記のSIZE形式をご覧ください -s、-サイズ 各ファイルに割り当てられたサイズをブロック単位で出力します SIZEは、次のいずれか(またはオプションで後に続く整数)のいずれかです。 lowing:KB 1000、K 1024、MB 1000 * 1000、M 1024 * 1024など、G、T、 P、E、Z、Y