LINUX.ORG.RU

Помогите кто чем может(Bash/Awk)


0

0

сабж. Влетел так влетел. У меня стоял Gentoo год. Но я его угробил(вернее не я, а фс). Но distfiles как ни странно, остались живы. Слил с помощью growisofs на dvd-r, но все имена оказались в формате 8.3:( я сделал ls -la > file.txt и слил себе. Как мне теперь восстановить имена. Если не трудно, напишите кто-нибудь скриптик(я сам пока совсем начинающий, на уровне hellloworld). Только загвоздка ещё одна есть. там у нескольких файлов размеры совпадают, но первые буквы - разные. заранее спасибо


что-то я не вполне понял. Покажи несколько строчек с file.txt и несколько строчек с двд. Там поддиректории есть кстати? В file.txt о их содержимом что-то есть?

Teak ★★★★★
()
Ответ на: комментарий от Teak

file.txt: total 3167424 drwxrwsr-x 5 root portage 77824 2007-03-13 00:57 . drwxr-xr-x 159 root root 4096 2007-03-04 20:45 .. -r-xr-xr-x 1 root portage 6388 2006-10-31 23:36 1.0.2-overlay-window.patch.bz2 -rw-rw-r-- 1 root portage 93996 2006-10-31 23:36 1.0.4.3.arm -rw-rw-r-- 1 root portage 107 2006-10-31 23:36 1.0.4.3.arm.DIGESTS -rw-rw-r-- 1 root portage 656308 2006-10-08 00:49 13969-crystal-1.0.2.tar.bz2 -rw-rw-r-- 1 root portage 460964 2006-07-23 01:22 30375-akode-2.0.1.tar.bz2 -rw-rw-r-- 1 root portage 5049 2002-01-15 09:22 3051.tar.gz

dvd 1_0_2_OV.BZ2 1_0_4_3.ARM 13969_CR.BZ2 30375_AK.BZ2

вот так всё обстоит

gor
() автор топика
Ответ на: комментарий от gor

1. Перед кнопочкой "Отправить" неспроста стоит селектор для форматирования.

2. Что там насчёт поддиректорий?

Teak ★★★★★
()
Ответ на: комментарий от gor

#!/usr/bin/perl -w
use strict;
chdir $ARGV[0] or die "cannot chdir to $ARGV[0]: $!";
shift @ARGV;
sub mkshortname($) {
        my $name = shift;
        die "bad name: $name" unless $name =~ /^(.*)\.([^.]+)$/;
        my $sname = substr $1, 0, 8;
        my $ext = substr $2, 0, 3;
        return "\U$sname.$ext";
}
while(<>) {
        next unless /^-/;
        my @fields = split /\s+/;
        my ($name, $size) = ($fields[7], $fields[4]);
        my $shortname = mkshortname $name;
        next unless -f $shortname && $size == (stat $shortname)[7];
        rename $shortname, $name;
}

пускать так: ./rec.pl /path/to/dir </path/to/file.txt
рекомендую сначала сделать бэкап этой директории.

Teak ★★★★★
()
Ответ на: комментарий от Teak

поставить - поставлю, приезжай :) только вот ответь на два вопроса плиз: 1. как это работает? (я в перле мало смыслю, заинтриговало :)) 2. как заменить функцию rename на вызов команды mv? ато переименовывать не хочет :( только по списку пробегает и всё, тишина в деревне :)

gor
() автор топика
Ответ на: комментарий от gor

Н-да... :) Всё хорошо, только оно не работает. :) Я у себя воссоздавал структуру типа твоей - всё переименовалось в лучшем виде. Понаставь там отладочных print'ов в цикле, может ясно станет, на каком шаге уходит на next. Потому что до rename дело скорей всего просто не доходит.

Да, и я надеюсь, ты этот скрипт не прогоняшь прямо на смонтированном двд? :) А то ведь он вроде как read only, боюсь что на нём ничего не переименуется. :)

Teak ★★★★★
()
Ответ на: комментарий от Teak

>Понаставь там отладочных print'ов в цикле, может ясно станет, на каком шаге уходит на next. Потому что до rename дело скорей всего просто не доходит.
сори за лам, но какой там синтаксис?

>Да, и я надеюсь, ты этот скрипт не прогоняшь прямо на смонтированном двд? :) А то ведь он вроде как read only, боюсь что на нём ничего не переименуется. :)
Нет, ну я знаю, что я дурак, но не настолько бугага :)

gor
() автор топика
Ответ на: комментарий от Teak

Ну плз, последний момент...
с принт я разобрался, облом после next unless -f $shortname && $size == (stat $shortname)[7];
и в коротких именах все символы "-"заменены на "_".
Ну или хотябы маны посоветуй...

gor
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.