16MiB(16777216바이트)에 도달할 때까지 채우고 싶은 파일이 있습니다. 현재 16515072바이트입니다. 차이는 262144바이트입니다.
어떻게 패딩하나요?
이것은 작동하지 않는 것 같습니다:
cp smallfile.img largerfile.img
dd if=/dev/zero of=largerfile.img bs=1 count=262144
답변1
seek
물리적 패딩에 대한 답을 얻는 대신, 파일의 새 끝 부분에 단일 문자를 작성하여 파일의 패딩 공간 대부분을 비워("구멍") 둘 수 있습니다.
dd if=/dev/zero of=largerfile.txt bs=1 count=1 seek=16777215
(장점은 특히 사용할 때 성능이 더 뛰어나고 bs=1
추가 디스크 공간을 많이 차지하지 않는다는 것입니다.)
문자를 추가하지 않아도 if=/dev/null
이 방법은 원하는 최종 파일 크기를 사용하여 작동하는 것 같습니다.
dd if=/dev/null of=largerfile.txt bs=1 count=1 seek=16777216
더 큰 블록 크기를 사용하는 물리적 패딩 솔루션의 고성능 변형은 다음과 같습니다.
padding=262144 bs=32768 nblocks=$((padding/bs)) rest=$((padding%bs))
{
dd if=/dev/zero bs=$bs count=$nblocks
dd if=/dev/zero bs=$rest count=1
} 2>/dev/null >>largerfile.txt
답변2
stdout을 제거 of=largerfile.txt
하고 파일에 추가합니다.
dd if=/dev/zero bs=1 count=262144 >> largerfile.txt
답변3
@frostschutz가 제공한 간단한 답변이 답변으로 게시되었습니다.
truncate -s 16M thefile
답변4
꼭 사용해야 하나요 dd
? 파일의 길이를 특정(논리적)으로 설정하려면 원하는 위치에 0을 쓰면 됩니다. 이전 끝과 쓰여진 바이트 사이의 바이트는 null 바이트를 갖는 것으로 나타납니다. 다음은 Perl을 사용한 예입니다.
$ echo Hello > file
$ ls -l file
-rw-r--r-- 1 user group 6 Apr 16 22:59 file
$ perl -le 'open(my $f,"+<","file"); seek($f, 16777216 - 2, 0); print $f "\0"'
$ ls -ln file
-rw-r--r-- 1 user group 16777216 Apr 16 22:59 file
왜 줄에 "-2"를 추가해야 합니까? 스크립트는 바이트를 쓸 것이므로 1을 빼서 해당 바이트 이전의 위치를 찾습니다. 조회 위치의 색인이 0이므로 다른 하나는 제거합니다.