1

Доброго времени!
Нужно вытащить из файла вида

drwxr-xr-x 11 root root      4096 2012-08-10 01:32 .
-rw-r--r--  1 root root     10188 2011-04-25 04:36 ./ANNOUNCE.13_37
-rw-r--r--  1 root root     20933 2006-10-02 04:36 ./BOOTING.TXT
-rw-r--r--  1 root root     15529 2012-08-05 15:40 ./CHANGES_AND_HINTS.TXT
-rw-r--r--  1 root root    726680 2012-08-09 22:46 ./CHECKSUMS.md5
-rw-r--r--  1 root root       198 2012-08-09 22:46 ./CHECKSUMS.md5.asc
-rw-r--r--  1 root root     17976 1994-06-10 02:28 ./COPYING
-rw-r--r--  1 root root     35147 2007-06-30 04:21 ./COPYING3
-rw-r--r--  1 root root     19531 2009-08-26 02:07 ./COPYRIGHT.TXT
-rw-r--r--  1 root root       616 2006-10-02 04:37 ./CRYPTO_NOTICE.TXT
-rw-r--r--  1 root root    150279 2012-08-10 01:32 ./ChangeLog.txt
-rw-r--r--  1 root root     33523 2008-12-08 18:12 ./FAQ.TXT
-rw-r--r--  1 root root    965411 2012-08-09 22:46 ./FILELIST.TXT
-rw-r--r--  1 root root      1565 2003-02-26 23:34 ./GPG-KEY
-rw-r--r--  1 root root    612107 2012-08-10 01:35 ./PACKAGES.TXT
-rw-r--r--  1 root root      9368 2011-04-21 23:38 ./README.TXT
-rw-r--r--  1 root root      3629 2012-07-13 16:27 ./README.initrd
-rw-r--r--  1 root root     34068 2011-04-08 15:15 ./README_CRYPT.TXT
-rw-r--r--  1 root root      8978 2011-04-08 15:16 ./README_LVM.TXT
-rw-r--r--  1 root root     17957 2011-03-15 18:32 ./README_RAID.TXT
-rw-r--r--  1 root root      3623 2011-04-25 04:57 ./RELEASE_NOTES
-rw-r--r--  1 root root     13855 2008-12-08 18:13 ./SPEAKUP_DOCS.TXT
-rw-r--r--  1 root root     17294 2008-12-08 18:13 ./SPEAK_INSTALL.TXT
-rw-r--r--  1 root root     58732 2010-05-18 21:47 ./Slackware-HOWTO
-rw-r--r--  1 root root      7017 2012-07-21 21:41 ./UPGRADE.TXT

...

-rw-r--r--  1 root root     16393 2012-07-06 21:13 ./usb-and-pxe-installers/usbimg2disk.sh  

(файл - ftp://mirror.yandex.ru/slackware/slackw … LELIST.TXT) сведения о размере файла. С уникальными файлами отрабатывает на раз

grep -e $name FILELIST.TXT | col | rev | cut -d" " -f4 | rev

Но вот с неуникальными, типа CHECKSUMS.md5 grep честно возвращает все найденные совпадения. и мой скрипт впадает в ступор. Как получить размер файла? Спасибо заранее!
Вот проблемный кусок скрипта:

for i in $( cat "$TMP/FILELIST.TXT" | tail +7 | cut -d. -f2- ) ; do
    echo "Checking: $i"
    if [ -e "$OLD$i" ] ; then
        echo $i
        newsize=$( grep -e "$i" "$TMP/FILELIST.TXT" | col | rev | cut -d" " -f4 | rev )
        oldsize=$( grep -e "$i" "$OLD/FILELIST.TXT" | col | rev | cut -d" " -f4 | rev )
        echo "Size of new file: $newsize, size of old file: $oldsize"
    ...
    fi
...
done

Нужно это, чтобы следить за обновлениями в current.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Arch Linux/Xfce/Xiaomi Mi Notebook Pro 15.6 | Slackware64-current/Xfce/Lenovo G580

2 (12.08.2012 21:38:15 отредактировано bormant)

Следить за изменениями просто: достаточно читать ChangeLog.txt.
Возвращаясь к вопросу: с путём искать не пробовали? Например,

$ grep \\./CHECKSUMS.md5$ FILELIST.TXT
-rw-r--r--  1 root root    726680 2012-08-09 22:46 ./CHECKSUMS.md5

даст одну нужную строку, а

$ grep \\./CHECKSUMS.md5$ FILELIST.TXT | awk '{print $5}'
726680

искомый размер.

3 (12.08.2012 21:45:32 отредактировано -=Serj=-)

#!/usr/bin/env python
import sys
f = open('FILELIST.TXT', 'r')
for line in  f.readlines():
    if line.find(sys.argv[1])>0:
        print(line.split()[7], line.split()[4])
Да, у меня Ubuntu.
Нет, не глючит.

4 (12.08.2012 21:44:38 отредактировано yars)

bormant пишет:

Следить за изменениями просто: достаточно читать ChangeLog.txt

Ну, в принципе, да. Но, имхо, этот файл дает информацию в удобном для человека виде, а мне нужно поддерживать актуальность "локального зеркала", ну и покрепче въехать в скриптинг ab

bormant пишет:

с путём искать не пробовали?

Попробую, спасибо!

bormant пишет:

двойной rev зачем, cut -d' ' -f5 разве не справляется?

Ну, как-то не очень:

+ открыть спойлер
root
root

root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root

root 

UPD: А с конца выбрать текст легче...
И да, спасибо

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Arch Linux/Xfce/Xiaomi Mi Notebook Pro 15.6 | Slackware64-current/Xfce/Lenovo G580

5

yars,
поправил, так справляется.

6

Я тоже чуть красоты навёл http://linuxforum.ru/extensions/bbcode_smiles/img/ab.gif

Да, у меня Ubuntu.
Нет, не глючит.

7

yars пишет:

Ну, в принципе, да. Но, имхо, этот файл дает информацию в удобном для человека виде, а мне нужно поддерживать актуальность "локального зеркала", ну и покрепче въехать в скриптинг

лучше дату проверяйте.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

8

yars пишет:

мне нужно поддерживать актуальность "локального зеркала", ну и покрепче въехать в скриптинг ab

man rsync, достаточно одной команды, возможно в cron-е, тем более, что поддержка и на оф. зеркалах, и на mirror.yandex.ru есть.
Также, есть смысл глянуть mirror-slackware-current.sh от AlienBOB-а.

9

Ну, мне кажется целесообразным проверять именно контрольную сумму. Сейчас скрипт работает по такому алгоритму: скачиваем FILELIST.TXT, выбираем из него  имена файлов, проверяем: если это каталог, то создаем его, если  симлинк, то смотрим, на какой файл указывает, проверяем наличие и контрольную сумму этого файла, если все в порядке, копируем этот файл, иначе скачиваем. Если это файл, то тоже проверяем контрольную сумму, если все в порядке, копируем, иначе качаем. Предполагается, что на диске лежит старая current, из которой мы собираем файлы, не менявшиеся со времени последней проверки. Сам скриптик не бог весть какой сложный, как закончу - выложу. Сейчас времени нет с ним  заниматься.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Arch Linux/Xfce/Xiaomi Mi Notebook Pro 15.6 | Slackware64-current/Xfce/Lenovo G580

10

Про rsync знаю, это все в учебных целях, не более.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Arch Linux/Xfce/Xiaomi Mi Notebook Pro 15.6 | Slackware64-current/Xfce/Lenovo G580

11

yars пишет:

Ну, мне кажется целесообразным проверять именно контрольную сумму.

на самом деле, это всё ерунда. Надёжно проверять лишь ЭЦП от Патрега. md5 там лишь для контроля правильности записи CD/DVD и прочего такого (когда вы САМИ записывали диск, и следовательно злоумышленник не мог ничего испортить. А вот разные яндексы могут быть взломаны. Причём ничего не стоит сменить не только файл, но и md5)

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

12

Это понятно. Но это я не столько безопасности ради, сколько 1) для контроля целостности принятого из сети файла, и 2) так узнаю о том, что локальные файлы устарели.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Arch Linux/Xfce/Xiaomi Mi Notebook Pro 15.6 | Slackware64-current/Xfce/Lenovo G580

13

yars пишет:

Это понятно. Но это я не столько безопасности ради, сколько 1) для контроля целостности принятого из сети файла, и 2) так узнаю о том, что локальные файлы устарели.

1) для этого надо юзать ЭЦП
2) а для этого - дату.

Т.е. алгоритм такой:
1. читаем список файлов, и отбираем новые.
2. качаем новые.
3. проверяем ЭЦП скаченных файлов.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)