Создание произвольно большого “поддельного” файла

Если у Вас нет инструментов GNU или если бы Ваши имена файлов содержат много специальных символов, я использовал бы одно из отличных решений Gilles.

Однако вот одно решение с помощью GNU find, sort, cut и awk- в основном набор инструментов, что предложенный alex:

$ find -iname "*.png" -exec ls -s {} + | sort -n | cut -d" " --complement -f1 | awk '{ if ( NR % 50 == 0 ) print}' | xargs -d"\n" eog

Здесь я использовал глаз гнома (eog) как программа просмотра изображений, главным образом потому что это был один из некоторых, я мог найти, что берут несколько параметров командной строки, и делает что-то разумное с ним.

Я уверен, что мог удалить sort и cut в пользу еще некоторых awk код. Чтобы быть абсолютно честным, я не уверен, как это решение будет взаимодействовать с пробелом.

16
29.12.2012, 00:37
4 ответа

Можно создать редкий файл в определенных файловых системах, которые, будет казаться, будут определенным размером, но на самом деле не используют так много пространства на диске.

$ dd if=/dev/null of=sparse bs=1024 count=1 seek=524288000
0+0 records in
0+0 records out
0 bytes (0 B) copied, 2.4444e-05 s, 0.0 kB/s
$ ls -l sparse 
-rw-rw-r--. 1 ignacio ignacio 536870912000 May  9 22:25 sparse
$ du -h sparse
0   sparse
17
27.01.2020, 19:48
  • 1
    Это работает отлично. Лучший случай я надеялся на решение, где я мог на самом деле написать сценарий, что вывод (как, для каждого искать положение Вы смотрите на данные, был бы хешем того положения или чего-то вдоль тех строк), но это было симпатично там. Это определенно работает на данный момент, Спасибо! –  Mediocre Gopher 10.05.2012, 06:15
  • 2
    @MediocreGopher, Вы, конечно, могли сделать что-то как этот с FUSE. –  cjm 10.05.2012, 08:55

Вне базирующегося решения портативного dd/seek уже упомянул, что некоторые Unixes специализировали команды:

По крайней мере, на Солярисе, MacOS/X и Irix:

mkfile -n 500m sparseFile

На предварительном выделении HP-UX на AIX lmktemp. и многих дистрибутивах Linux имеют усеченный

1
27.01.2020, 19:48

Если Вы не должны искать назад в файле, Вы могли бы использовать именованный канал:

mkfifo my_special_file
yes | head -n 100 > my_special_file&
cat my_special_file

Конечно, можно использовать любую другую команду, включая сложный сценарий, для генерации данных в канале.

1
27.01.2020, 19:48

Ну, с dd можно указать blocksize и количество, и таким образом ограничить размер как это:

dd if=/dev/urandom count=5 bs=1024 > nullfile

Если Вы хотите читать из него, просто передайте его по каналу:

dd if=/dev/urandom count=5 bs=1024 | yourReadingProcess 

В старину каждая установка Linux, которую я сделал, шла с некоторыми сетевыми инструментами, portmap, inet.d и таким, и в inet.d, там где некоторые сервисы, всегда указанные, один из них был описан/назван chargen, если я помню правильно.

(... одну минуту спустя...)

Да. В/etc/services Вы находите

chargen         19/tcp          ttytst source
chargen         19/udp          ttytst source

Таким образом, я предполагаю, что это - сервис для тестирования чего-то, и который отправляет символы - возможно, случайный - по сети. Я только нахожу/etc/xinet.d/chargen на своем ПК. Существует больше infos:

# default: off
# description: An xinetd internal service which generate characters.  The
# xinetd internal service which continuously generates characters until the
# connection is dropped.  The characters look something like this:
# !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg
# This is the tcp version.

Однако я не знаю, как использовать его для Вашей цели.

0
27.01.2020, 19:48

Теги

Похожие вопросы