38 lines
2.3 KiB
Markdown
38 lines
2.3 KiB
Markdown
|
## Домашнее задание №7 «Утилита для копирования файлов»
|
|||
|
Необходимо реализовать утилиту копирования файлов (упрощенный аналог `dd`).
|
|||
|
|
|||
|
Тулза должна принимать следующие аргументы:
|
|||
|
* путь к исходному файлу (`-from`);
|
|||
|
* путь к копии (`-to`);
|
|||
|
* отступ в источнике (`-offset`), по умолчанию - 0;
|
|||
|
* количество копируемых байт (`-limit`), по умолчанию - 0 (весь файл из `-from`).
|
|||
|
|
|||
|
Особенности:
|
|||
|
* offset больше, чем размер файла - невалидная ситуация;
|
|||
|
* limit больше, чем размер файла - валидная ситуация, копируется исходный файл до его EOF;
|
|||
|
* программа может НЕ обрабатывать файлы, у которых неизвестна длина (например, /dev/urandom);
|
|||
|
|
|||
|
Также необходимо выводить в консоль прогресс копирования в процентах (%),
|
|||
|
допускается использовать для этого стороннюю библиотеку.
|
|||
|
|
|||
|
Юнит-тесты могут использовать файлы из `testdata` (разрешено добавить свои, но запрещено удалять имеющиеся)
|
|||
|
и должны чистить за собой создаваемые файлы (или работать в `/tmp`).
|
|||
|
|
|||
|
При необходимости можно выделять дополнительные функции / ошибки.
|
|||
|
|
|||
|
**(*) Дополнительное задание: реализовать прогресс-бар самостоятельно.**
|
|||
|
|
|||
|
### Критерии оценки
|
|||
|
- Пайплайн зелёный - 4 балла
|
|||
|
- Добавлены юнит-тесты - до 4 баллов
|
|||
|
- Понятность и чистота кода - до 2 баллов
|
|||
|
- Дополнительное задание на баллы не влияет
|
|||
|
|
|||
|
#### Зачёт от 7 баллов
|
|||
|
|
|||
|
### Подсказки
|
|||
|
- `github.com/cheggaaa/pb`
|
|||
|
- `os.OpenFile`, `os.Create`, `os.FileMode`
|
|||
|
- `io.CopyN`
|
|||
|
- `os.CreateTemp`
|