🏠 Домашнее задание
Задание (дословно из LMS)
Linux: Домашнее задание 19
- Создайте на сервере
linux.itcareerhub.deв своей папке/opt2 дополнительных директории. - В первой директории найдите способ (например написав скрипт или выполнив команду в терминале) создать 100 файлов со случайными названиями с использованием
$RANDOM. Например файлы153589396240. - Напишите скрипт, который будет переносить в другую директорию файлы, если число, стоящее в названии чётное — то перенести файлы в другую директорию, если нет — оставить в текущей.
- Пришлите команды или скрипты, с помощью которых Вы выполнили задание.
Пошаговое решение
Шаг 1: подключиться к серверу
ssh имя_пользователя@linux.itcareerhub.de
Шаг 2: создать две директории в /opt
# Перейти в свою папку /opt
cd /opt/your_username
# Создать две директории
mkdir dir_source
mkdir dir_even
# Проверить
ls -la
Шаг 3: создать 100 файлов с $RANDOM-именами
Вариант А: одна команда
cd dir_source
for i in {1..100}; do touch $RANDOM; done
ls | head -20
Вариант Б: скрипт
#!/bin/bash
# Создать 100 файлов с именами $RANDOM в первой директории
TARGET_DIR="/opt/your_username/dir_source"
cd "$TARGET_DIR"
for i in {1..100}; do
touch $RANDOM
done
echo "Создано файлов: $(ls | wc -l)"
Примечание:
$RANDOM генерирует число от 0 до 32767. Возможны коллизии (одинаковые имена), поэтому реально созданных файлов может быть немного меньше 100.
Шаг 4: скрипт переноса файлов с чётными именами
#!/bin/bash
SOURCE_DIR="/opt/your_username/dir_source"
TARGET_DIR="/opt/your_username/dir_even"
# Перебрать все файлы в исходной директории
for file in "$SOURCE_DIR"/*; do
# Получить имя файла (без пути)
name=$(basename "$file")
# Проверить, является ли имя числом и чётным ли оно
if [ "$((name % 2))" -eq 0 ]; then
mv "$file" "$TARGET_DIR/"
echo "Перенесён: $name"
fi
done
echo "Готово!"
echo "В dir_source: $(ls $SOURCE_DIR | wc -l) файлов"
echo "В dir_even: $(ls $TARGET_DIR | wc -l) файлов"
Шаг 5: запустить скрипт
chmod +x move_even.sh
./move_even.sh
Шаг 6: проверить результат
# Посмотреть сколько файлов в каждой директории
ls /opt/your_username/dir_source | wc -l # нечётные
ls /opt/your_username/dir_even | wc -l # чётные
# Убедиться что все имена в dir_even чётные
for f in /opt/your_username/dir_even/*; do
name=$(basename "$f")
echo "$name % 2 = $((name % 2))"
done
Объяснение логики
basename "$file"— извлечь имя файла без пути$((name % 2))— арифметическое выражение: остаток от деления на 2-eq 0— равно нулю (чётное число)mv "$file" "$TARGET_DIR/"— переместить файл в целевую директорию
Проверка в VS Code: Если у вас настроено подключение к серверу через Remote-SSH расширение, можно открыть терминал и запустить скрипт прямо из редактора. Точки останова (F9) и отладка (F5) работают для Python-скриптов; для bash-скриптов используйте
bash -x ./move_even.sh (режим трассировки).