dd를 사용하여 파일 끝을 잘라냅니다.

dd를 사용하여 파일 끝을 잘라냅니다.

이를 수행하는 간단한 방법이 있을 수 있지만 매뉴얼 페이지에서는 알아낼 수 없습니다.

예를 들어, ?를 사용하여 크기가 결정되지 않은 파일에서 마지막 1MB를 잘라내는 방법은 무엇입니까 dd?

답변1

stat음, and 가 있다고 가정하면 다음을 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

답변2

dd --도움말
사용법: dd [피연산자]...
  또는: dd 옵션
파일을 복사하고 피연산자에 따라 변환하고 형식을 지정합니다.

  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는 쉼표로 구분된 기호 목록으로 씁니다.
  eek=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  
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

찾기 옵션을 사용하면 출력 파일의 특정 위치에 쓸 수 있습니다. 처음 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

       --블록 크기 = 크기
              SIZE바이트 블록을 사용합니다. 아래의 SIZE 형식을 참조하세요.

       -s, --size
              각 파일의 할당된 크기를 블록 단위로 인쇄합니다.

       SIZE는 다음 중 하나일 수 있습니다(또는 선택적으로 정수가 뒤에 올 수 있음).
       낮음: KB 1000, K 1024, MB 1000*1000, M 1024*1024, G, T 등,
       P, E, Z, Y.

답변3

파일을 복사하지 않고 자르기를 사용하려면 dd입력 파일을 로 설정하고 검색 지점에서 출력(대상) 파일을 자르 /dev/null도록 해야 합니다 . dd예를 들어:

dd if=/dev/null of=somefile.txt bs=1M seek=10

잘릴 것이다일부파일.txt10MB.

그러나 파일 길이가 가변적이며 끝에서 고정된 양을 제거하려는 경우 이 명령을 살펴보십시오 truncate. 절대량 또는 상대량이 있을 수 있으므로 truncate <file> --size=X작동 원리는 더 간단합니다 . X또한 새 크기가 더 큰 경우 구멍을 사용하여 파일을 하나씩 확장합니다. 바라보다:

$ dd if=/dev/urandom of=somefile.txt bs=1M count=13
13631488 bytes (14 MB, 13 MiB) copied, 0.0661225 s, 206 MB/s
$ ls -lh somefile.txt 
-rw-rw-r-- 1 13M Sep 28 20:18 somefile.txt
$ truncate -s -3M somefile.txt  # remove the trailing 3MB
$ ls -lh somefile.txt 
-rw-rw-r-- 1 10M Sep 28 20:18 somefile.txt

동일한 을 사용 dd하지만 상대 크기는 사용하지 않습니다.

$ dd if=/dev/urandom of=somefile.txt bs=1M count=13
13631488 bytes (14 MB, 13 MiB) copied, 0.0669367 s, 204 MB/s
$ ls -lh somefile.txt 
-rw-rw-r-- 1 13M Sep 28 20:21 somefile.txt
$ dd if=/dev/null of=somefile.txt bs=1M seek=10
0 bytes copied, 3.6978e-05 s, 0.0 kB/s
$ ls -lh somefile.txt 
-rw-rw-r-- 1 10M Sep 28 20:22 somefile.txt

관련 정보