# Генерация нескольких сотен тестовых файлов в цикле (Linux)

### Генерация

- С небольшой датой (501 файл):

```bash
for i in {1..501}; do echo $(date +%T_%s) > "${i}.txt" ; echo "$i"; done
# Sample content:
# 12:22:07_1769505327
```

- С произвольной неповторяющейся датой (501 файл):

```bash
for i in {1..501}; do echo "$(date +%T_%s && openssl rand -base64 24)" > "${i}.txt" ; echo -e "Generated \e[1;34m${i}.txt\e[0m"; done
# Sample content:
# 12:22:07_1769505727
# vCN9MgYoOe1PLQiitXEGhSWqaCcFwqba
```

- С уникальными именами и данными (501 файл):

```bash
for i in {1..501}; do fname="$(openssl rand -hex 32)"; echo -e "$(date +%T_%s)\n$fname" > "${fname}${i}.txt" ; echo -e "Generated \e[1;34m${fname}${i}.txt\e[0m"; done
# Sample content:
# 12:28:20_1769506100
# 48a2a31880bb565ca40baa3147a35c70786dfcca689de6f453690dd8e9f24d30
```

[![image.png](https://info.elijahkamsky.ru/uploads/images/gallery/2026-01/scaled-1680-/mo9image.png)](https://info.elijahkamsky.ru/uploads/images/gallery/2026-01/mo9image.png)

### Создание архива

Создание архива одной командой (все txt-файлы в этой директории):

```bash
zip -r archive_$(date +%F).zip ./*.txt 
```

[![image.png](https://info.elijahkamsky.ru/uploads/images/gallery/2026-01/scaled-1680-/7K6image.png)](https://info.elijahkamsky.ru/uploads/images/gallery/2026-01/7K6image.png)

### Бонус: сильно ускоренная версия скрипта

```bash
#!/bin/bash
# Генерация 10k файлов
count=10000
for ((i=1;i<=count;i++)); do
  fname="$(openssl rand -hex 32)"
  printf -v now '%(%T_%s)T' -1           # builtin, без fork()
  printf '%s\n%s\n' "$now" "$fname" "$RANDOM" > "${fname}${i}.txt"
  # логирует реже, иначе терминал станет бутылочным горлышком
  (( i % 500 == 0 )) && echo "Generated $i files..."
done
echo -e "\e[1;34mDONE!\e[0m"
```

Но здесь есть нюанс: оно работает быстро только на SSD, т.к. каждый файл нужно записать на диск. И тут упор будет уже в скорость чтения/записи. И разница критичная. Вот пример для SSD:

[![image.png](https://info.elijahkamsky.ru/uploads/images/gallery/2026-01/scaled-1680-/TW3image.png)](https://info.elijahkamsky.ru/uploads/images/gallery/2026-01/TW3image.png)

**На HDD этот процесс будет выполняться более чем в 100 раз дольше.**

### Бонус 2: подсчет кол-ва файлов в директории

Чтобы посчитать кол-во файлов в директории, можно использовать:

```bash
ls -1 | wc -l
```

Но с этой командой есть нюанс: она считает вообще все записи, <span style="text-decoration: underline;">включая директории</span>. Чтобы посчитать только файлы с расширением <span style="color: rgb(45, 194, 107);">**.txt**</span> можно использовать **GREP**:

```bash
ls -1 | grep '.txt' | wc -l
```

Разница видна здесь:

[![image.png](https://info.elijahkamsky.ru/uploads/images/gallery/2026-01/scaled-1680-/wMMimage.png)](https://info.elijahkamsky.ru/uploads/images/gallery/2026-01/wMMimage.png)