파일 끝 부분을 잘라내려면`dd`를 사용하십시오


18

이 작업을 수행하는 간단한 트릭이 있지만 맨 페이지에서 그림을 볼 수 없습니다.

예를 들어 dd? 를 사용하여 결정되지 않은 크기의 파일에서 마지막 1MB를 잘라 내려면 어떻게합니까 ?


1
마지막 1MB를 제외하고 해당 파일의 사본을 원하십니까? 아니면 마지막 MB를 다른 파일로 복사 하시겠습니까?
Mat

마지막 1MB를 원합니다
zetah

답변:


29

글쎄, 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?
ADTC December

나는 그가 + $ ((1024 * 1024))을 의미한다고 생각합니다 : -c, --bytes = K 마지막 K 바이트를 출력합니다; 또는 -c + K를 사용하여 각 파일의 Kth로 시작하는 바이트를 출력하십시오.
Vanuan

5
dd-도움말
사용법 : dd [OPERAND] ...
  또는 : 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
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

skip 옵션을 사용하여 파일의 첫 번째 1MB를 건너 뛰는 파일 끝까지 읽을 수 있도록 파일의 첫 1MB를 건너 뛸 수도 있습니다.

dd if=/10/MB/file of=/9/MB/file skip=1M ibs=1M obs=1M

seek 옵션을 사용하여 출력 파일의 특정 위치에을 쓸 수 있습니다. 처음 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
              각 파일의 할당 된 크기를 블록 단위로 인쇄

       SIZE는 다음 중 하나 일 수 있습니다 (또는 선택적으로 정수가 될 수 있음).
       최저 : G, T, KB 1000, K 1024, MB 1000 * 1000, M 1024 * 1024 등
       P, E, Z, Y.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.