이를 수행하는 간단한 방법이 있을 수 있지만 매뉴얼 페이지에서는 알아낼 수 없습니다.
예를 들어, ?를 사용하여 크기가 결정되지 않은 파일에서 마지막 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