명령 행에서 특정 크기의 파일을 작성하는 방법


125

touch특정 크기 (예 : 14MB) 의 파일을 어떻게 만들 수 있습니까 (예 : 명령 또는 다른 유사한 방법 사용 )?

사용 사례는 다양한 파일 크기로 FTP를 테스트하는 것입니다. 특정 크기의 파일을 만들 수 있다면 FTP 전송 등을 확인하는 것이 좋습니다.


답변:


158

사용 truncate:

truncate -s 14M filename

보낸 사람 man truncate:

DESCRIPTION
   Shrink or extend the size of each FILE to the specified size

[...]

 -s, --size=SIZE
          set or adjust the file size by SIZE

참고 : truncate시스템에서 사용하지 못할 수 있습니다 (예 : Mac OS X에서는 기본적으로 설치되지 않음) (예 : macports를 사용하여 쉽게 설치할 수 있음). 이 경우 dd또는 head대신 사용해야 할 수도 있습니다 .


2
와. 아주 좋은, 나는 이것을 몰랐다.
n611x007

남자는 모든 것을 말합니다 : 자르기-파일 크기를 지정된 크기로 축소 또는 확장
ssedano

12
정말 좋습니다. 는 touch하지만, 당신은 간단하게 실행할 수 있습니다 필요하지 않습니다 truncate -s 14M filename이 생성됩니다 filename직접.
terdon

멋진 ... 이것은 내가 정확히 찾은 것입니다 ... 감사 @ oliver-salzburg
fasil

34
이것은 희소 파일 을 만드는 것처럼 보이지만 아래 답변 ( "dd"사용)은 그렇지 않습니다. 차이가 당신에게 중요한지 모르겠지만, 나는 그것을 지적 할 것이라고 생각했습니다.
offby 1

100

편집 : 가장 간단한 방법은 아마도 truncateAshutosh Vishwa Bandhu의 대답 일 것입니다. 그러나 @ offby1 이 지적한대로 스파 스 파일 을 생성 하여 원하는 파일 이 아닐 수도 있습니다. 아래 솔루션은 정상적인 전체 파일을 만듭니다.


다음 명령은라는 14MB 파일을 만듭니다 foo.

  1. fallocate( 의견에 의견을 제안한 @Breakthrough 에게 감사하고 아래에 언급 한 Ahmed Masud의 답변에 투표 하십시오.)

    fallocate -l 14000000 foo
    

    이 명령은 truncate원하는 파일 크기에 관계없이 (즉시 큰) 빠르며 (대용량 파일의 경우 느린 다른 솔루션과 달리) 스파 스 파일이 아닌 일반 파일을 생성하기 때문에 특히 인상적 입니다.

    $ truncate -s 14MB foo1.txt 
    $ fallocate -l 14000000 foo2.txt 
    $ ls -ls foo?.txt 
        0 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:54 foo1.txt
    13672 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:55 foo2.txt
    
  2. 임의의 데이터로 채워진 파일 만들기

    dd if=/dev/urandom of=foo bs=14MB count=1
    

                                                                              또는

    head -c 14MB /dev/urandom > foo
    
  3. \0s로 채워진 파일을 작성하십시오 .

    dd if=/dev/zero of=foo.txt bs=14MB count=1
    

                                                                              또는

    head -c 14MB /dev/zero > foo
    
  4. 다른 파일의 첫 14MB 데이터로 채워진 파일을 작성하십시오.

    head -c 14MB bar.txt > foo
    
  5. 다른 파일의 마지막 14MB 데이터로 채워진 파일을 작성하십시오.

    tail -c 14MB bar.txt > foo
    

위의 모든 예에서 파일은 14*1000*1000원하는 14*1024*1024경우로 대체 MB됩니다 M. 예를 들면 다음과 같습니다.

dd if=/dev/urandom of=foo bs=14M count=1
head -c 14M /dev/zero > foo

fallocate 바이트 단위로만 처리되므로 (14 * 1024 * 1024 = 14680064)

fallocate -l 14680064 foo

2
감사합니다 ... 이것은 또한 원하는 크기의 파일을 만드는 내 목적을 충족시킬 것입니다 ...
fasil

2
dd더 간단하고 잠재적으로 덜 파괴적인 접근 방법이 있다면 사용하지 않는 것이 좋습니다 .
acolyte

3
@acolyte도 그렇게 할 것입니다. 이것이 각 dd솔루션에 dd가 아닌 대안이있는 이유 입니다.
terdon

1
위키 항목은 심지어 dd (0으로)가 희소 파일을 생성한다고 말합니다. 그렇지 않습니까? en.wikipedia.org/wiki/Sparse_file
Michael

1
@Michael 확실히 확인하기 위해 스파 스 파일을 생성하는 명령이 없습니다. dd위키 페이지 의 명령은 완전히 다르며 사용하지 않습니다 /dev/zero. 더 논리적 인지 M또는 MB더 논리적 인지 는 개발자에게 맡기십시오. head , taildd 의 맨 페이지에는 모두 "MB = 1000 * 1000, M = 1024 * 1024"라고 명시되어 있습니다. 다른 * nix에서는 다를 수 있습니다.
terdon 2018 년

21
dd bs=1MB count=14 if=/dev/zero of=<yourfilename>

경고 dd 는 사용자가 임의로 또는 실수로 작성할 수있는 권한을 가진 모든 것을 자동으로 덮어 씁니다 . dd예를 들어 이해해야 합니다. 독서와 함께 dd --help, 당신은 당신의 dd 명령 라인을 망치하지 않거나 다른 당신은 쉽게 되돌릴 수없는 데이터 손실을 만들 수 있습니다 - 총도 .

개시 내용 if=은 IS 입력 파일of=는 IS 출력 파일 . 명령을 실행하기 전에 항상 올바른지 다시 확인하십시오. :)


13

마술 사용 dd;) 맨 페이지

$ dd if=/dev/zero of=output.dat  bs=1024  count=14336

14MB * 1024 = 14336KB가 발생하거나

$ dd if=/dev/zero of=output.dat  bs=1MB  count=14

그리고 14MB output.dat 파일이 0으로 채워집니다. : D


8

가장 빠른 방법입니다.

SEEK=$SIZE-1
dd if=/dev/zero of=outfile bs=1 seek=$SEEK count=1 

그렇지 않으면 정확한 위치를 찾고 단일 바이트를 쓰는 빠르고 더러운 C 또는 perl 프로그램을 작성하십시오. 이것은 실제로 데이터를 블록에 덤프하는 것보다 훨씬 빠릅니다.

스파 스 파일을 피하려면 Linux (및 다른 시스템) fallocate -l <length>에서 사용할 수 있습니다 util-linux.

그것이 불가능하고 POSIX 호환 시스템을 가지고 있다면 posix_fallocate () 라이브러리 호출을 사용하여 빠르고 더러운 프로그램을 작성할 수 있습니다. posix_fallocate는 지정된 범위의 할당을 보장하므로 범위가 성공적으로 반환되면 이후에 범위를 사용할 때 디스크가 가득 차지 않게됩니다.


6

동안은 dd그것을 할 수있는 휴대용 방법, 명령입니다 mkfilexfs_mkfile이 목적을 위해 특별히 작성된 빠르다 있습니다 :

mkfile size[b|k|m|g] filename
xfs_mkfile size[b|k|m|g] filename

중요한 것은 어느 명령도 보편적으로 사용할 수 없으므로 이식 가능한 스크립트를 작성하는 데 좋지 않습니다. 그러나 명령 줄을 통해 대화 형으로 수행하는 경우 내가 사용하는 명령입니다.

기본적으로 이들은 채워지지 않은 파일을 생성하고 스파 스 (또는 "홀리") 파일은 생성하지 않습니다 . 둘 다 -n스파 스 파일을 만드는 옵션을 대신 사용합니다.


1

Perl에는 또 다른 옵션이 있습니다.

perl -e 'print "a" x 1024' > file.txt

1KB 파일이 생성됩니다. 1024를 원하는 숫자로 바꾸십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.