Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Создание нескольких каталогов по списку etc...  (Прочитано 1376 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Нужен реальный файл, потому-что на твоем примере тестовый вариант
Код: (perl) [Выделить]
#!/usr/bin/perl

my $d = '/telemetry';

my $n;
my %h;
while (<>) {
$n = $1 if (/^\s*Номер\s+(\d+)/);
if ($n) { $h{$n}{$1}=$2 if (/(\S+)\s*:\s*(\S+)/) }
}

for my $n (keys %h){
my $dir = $h{$n}{'Каталог'};
if ($dir){
delete $h{$n}{'Каталог'};
unless (system "echo Создание директории \"$d/$dir/\""){
for my $f (values %{$h{$n}}){
system "echo Запись \"$f\" в \"$d/$dir/$f\"";
}
}
}
print "\n";
}

работает так:
Создание директории /telemetry/d6nd77/
Запись 300 в /telemetry/d6nd77/300
Запись 32432443 в /telemetry/d6nd77/32432443
Запись 33 в /telemetry/d6nd77/33

Создание директории /telemetry/d6iy54/
Запись 100 в /telemetry/d6iy54/100
Запись 37458793 в /telemetry/d6iy54/37458793
Запись 3 в /telemetry/d6iy54/3

Создание директории /telemetry/hflgl/
Запись 100 в /telemetry/hflgl/100
Запись 75487375 в /telemetry/hflgl/75487375
Запись 3 в /telemetry/hflgl/3

Оффлайн hesoyamatogun

  • Автор темы
  • Активист
  • *
  • Сообщений: 347
    • Просмотр профиля
Да всё так, попробую потестить.
А это и есть реальный файл, со временем к нему будут добавляться еще строки но общая структура не сменится. Мусор я уже сам отсортирую предварительно, главное чтоб если каталог такой уже есть, никаких остановок, и перезаписать содержимого его файлов.

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6752
  • 20% Cooler
    • Просмотр профиля
позволяет хотя бы видеть что просиходит и подправить в случае чего

ну echo же где нужно
...
echo "Create directory /telemetry/$DIR"
     mkdir -p "/telemetry/$DIR"
echo "Record $ID to /telemetry/${DIR}/Идентификатор"
     echo "$ID" > "/telemetry/${DIR}/Идентификатор"
...

либо так
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
hesoyamatogun,
Остановок не будет, файлы будут перезаписыватся.
Т.к. mkdir даже если каталог уже существует все равно возвращает 0 (true).

Оффлайн hesoyamatogun

  • Автор темы
  • Активист
  • *
  • Сообщений: 347
    • Просмотр профиля
renzrv, Первый ваш скрипт ничего не вывел, создал директории и поместил в них файлы с названием значения, которое должно быть в файле не с названием значения а с названием параметров. Второй
вывел на экран то что он якобы создал, но ничего не создал вообще. Но даже бы если и создал, то создал бы файлы с не теми именами, то как он их называет должно быть внутри, а называтся они должны идентификатор, область, значение
Ща попробую ALiEN175'овский скпупт

Пользователь добавил сообщение 21 Ноября 2017, 19:17:35:
попробовал
root@sr:/telemetry# ./script.sh
./script.sh: 1: ./script.sh: Syntax error: redirection unexpected
Чертовщина, я вообще отсюда скопировал в nano, на концах некоторых строк появляются закрашеные зелёным квадраты, и пока их не удалишь не заработает. Как этого избежать?
windows7 - putty
COUNT=`sed -n '$=' <<<"$LIST"`Наверное на эту строку брешет, после <<< наверно пробел нехватает
-----всё равно брешет
« Последнее редактирование: 21 Ноября 2017, 19:26:16 от hesoyamatogun »

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
но ничего не создал вообще.
А он и не должен был ничего создавать, потому что тестовый.

Вот попробуй:
Код: (perl) [Выделить]
#!/usr/bin/perl

my $d = '/telemetry';

my $n;
my %h;
while (<>) {
$n = $1 if (/^\s*Номер\s+(\d+)/);
if ($n) { $h{$n}{$1}=$2 if (/(\S+)\s*:\s*(\S+)/) }
}

for my $n (keys %h){
my $dir = $h{$n}{'Каталог'};
if ($dir){
delete $h{$n}{'Каталог'};
print "Создание директории \"$d/$dir\"\n";
unless (system "mkdir -p \"$d/$dir\""){
for my $f (keys %{$h{$n}}){
my $z = $h{$n}{$f};
print "Запись \"$z\" в \"$d/$dir/$f\"\n";
system "echo \"$z\" > \"$d/$dir/$f\"";
}
}
}
print "\n";
}

PS: На perl парсер будет лучше.
Например потому что perl не создает кучу лишних процессов sed и прочих, работает быстрее и эффективнее,
+ имеет почти не ораниченные возможости расширения и усложнения.


Оффлайн hesoyamatogun

  • Автор темы
  • Активист
  • *
  • Сообщений: 347
    • Просмотр профиля
Да, сейчас получилось вроде как нужно, только вот я его редактировать не смогу совсем :-\
ALiEN175, ваш скрипт тоже сработал, когда заменил #!/bin/sh на bash
« Последнее редактирование: 21 Ноября 2017, 19:43:59 от hesoyamatogun »

 

Страница сгенерирована за 0.037 секунд. Запросов: 24.