LINUX.ORG.RU

использование sed в выводе md5sum

 ,


0

3

Добрый день.

Хотел бы попросить помощи. вобщем есть вот такая задача:

md5sum /home/geodata/geodata/GeoIP.dat | sed -e 's/\/home\/geodata\/geodata\///g' | sed 's/$/.temp/g'> /home/geodata/geodata/GeoIP.md5
нужно в файл GeoIP.md5 следом за хешем проверки дописать ~/geodata/GeoIP.dat.temp

То есть нужно вот это /home/geodata/geodata/GeoIP.dat заменить на ~/geodata/GeoIP.dat.temp

Подскажите, пожалуйста, решение и если можно - линки на хорошее описание sed'а с экранированием.

Спасибо!



Последнее исправление: beastie (всего исправлений: 1)

Я ничего не понял. В чему у вас проблема-то? Ну кроме того, что вы почему-то уверены, что надо использовать sed где ни попадя.

Zmicier ★★★★★
()

Ладно, ответа от вас не дождешься, поэтому рассказываю.

в файл GeoIP.md5 следом за хешем проверки дописать ~/geodata/GeoIP.dat.temp

Этого вам делать не нужно, ибо md5sum(1) разрешать тильду при сверке не умеет. На самом деле вам нужно относительное имя.

В остальном же все просто, и хотя вы не удосужились описать задачу, но я думаю, вам нужно что-то такое:

#!/bin/bash

for f; do
    [[ -f $f ]] || { echo >&2 $"$f: no such regular file"; continue; }
    read sum _f < <(md5sum "$f")
    printf '%s  %s\n' "$sum" "${f##*/}.temp" > "${f%.*}.md5"
done
Zmicier ★★★★★
()

Я тоже ничего не понял. Но символ-разделитель у седа может быть любым, не обязательно слэшом. Используйте там например | и не надо будет ничего экранировать.

Deleted
()
Ответ на: комментарий от Zmicier

Задача: 1. на server1 проверяю контрольную сумму файла GeoIP.dat и записываю в файл GeoIP.md5 с изменением имени на GeoIP.dat.temp 2. копирую по scp файл GeoIP.dat с server1 на server2 при этом переименовывая его в GeoIP.dat.temp 3. копирую файл GeoIP.md5 с server1 на server2 и удалённо по ssh скриптом запускаю md5sum -c GeoIP.md5, чтобы проверить контрольную сумму нового файла GeoIP.dat.temp, который я скопировал парой операций ранее. Проблема в том, что при удалённом запуске md5sum требует полного пути к файлу в GeoIP.md5, а полный путь прописать нет возможности, так как это будет происходить на нескольких серверах и на всех под разными пользователями (будет меняться название домашней диры).

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

Проблема в том, что при удалённом запуске md5sum требует полного пути к файлу в GeoIP.md5, а полный путь прописать нет возможности

И поэтому вы решили прописать путь в формате, который заведомо работать не может?

Что же вам делать на самом деле — я уже написал.

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

при копировании по сети могут возникнуть ошибки - это два

Вы полагаете, что scp — это что-то типа netcat’а?

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

Нет, ничего не полагаю, просто перестраховуюсь. Опыта в этом деле мало, от слова совсем.

bimmer
() автор топика

То есть нужно вот это /home/geodata/geodata/GeoIP.dat заменить на ~/geodata/GeoIP.dat.temp

Ну хорошо: sed 's@/home/geodata/geodata/GeoIP.dat@~/geodata/GeoIP.dat.temp@'

Список md5 будет неправильный, но должно работать.

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

Задача:
1. на server1 проверяю контрольную сумму файла GeoIP.dat и записываю в файл GeoIP.md5 с изменением имени на GeoIP.dat.temp
2. копирую по scp файл GeoIP.dat с server1 на server2 при этом переименовывая его в GeoIP.dat.temp
3. копирую файл GeoIP.md5 с server1 на server2 и удалённо по ssh скриптом запускаю md5sum -c GeoIP.md5, чтобы проверить контрольную сумму нового файла GeoIP.dat.temp, который я скопировал парой операций ранее.

Проблема в том, что при удалённом запуске md5sum требует полного пути к файлу в GeoIP.md5, а полный путь прописать нет возможности, так как это будет происходить на нескольких серверах и на всех под разными пользователями (будет меняться название домашней диры).

Вот скрипт, который копирует и сверяет md5-суммы скопированных файлов.
Полный путь только при создании тестовых директорий и копировании.

#!/bin/bash -x

# создаю пару файлов с какими-то данными
date -u > ./testfile1.dat
date +"%F %T" > ./testfile2.dat

# создаю md5-файлы
md5sum ./testfile1.dat > testfile1.md5
md5sum ./testfile2.dat > testfile2.md5

# создаю некорректную пару
cp testfile1.dat testfile3.dat
cp testfile2.md5 testfile3.md5

# создаю на серверк разные директории
ssh fs 'mkdir /tmp/upload1'
ssh fs 'mkdir /tmp/upload2'
ssh fs 'mkdir /tmp/upload3'

# скидываю файлы на сервер в разные директории
scp testfile1.dat testfile1.md5 fs:/tmp/upload1/
scp testfile2.dat testfile2.md5 fs:/tmp/upload2/
scp testfile3.dat testfile3.md5 fs:/tmp/upload3/

# выполняю проверку переписанных файлов
ssh fs 'cd /tmp/upload1; if md5sum -c ./testfile1.md5 &>/dev/null; then echo "Всё ОК :-)"; else echo "Всё плохо :-("; fi'
ssh fs 'cd /tmp/upload2; if md5sum -c ./testfile2.md5 &>/dev/null; then echo "Всё ОК :-)"; else echo "Всё плохо :-("; fi'
ssh fs 'cd /tmp/upload3; if md5sum -c ./testfile3.md5 &>/dev/null; then echo "Всё ОК :-)"; else echo "Всё плохо :-("; fi'

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