1

Я пытаюсь вывести в текстовый файл контрольную сумму md5 для каждого файла в папке в следующем формате:

checksumhash1 *NameOfFile1.ext
checksumhash2 *NameOfFile2.ext
checksumhash3 *NameOfFile3.ext
etc...

Вот пример вывода должен быть:

00c0eb18b7bfd2bf985451ae3ad5d68e *My Text File.txt
4935705ea05dabef98921b18aeeaadd3 *Another file.wmv

Пробовал команду ниже, и это настолько близко, насколько я могу получить:

md5 -r * | tee checksum.txt

Оттуда я потерялся и не могу понять, как сделать вывод md5 таким, как мне нужно. Мне просто нужно это "*" перед именем файла.

Есть ли там гуру? = Р

2 ответа2

2

Вы можете связать вывод, который вы уже получаете в sed (или другую программу редактирования потока), чтобы добавить дополнительный необходимый символ:

$ md5 -r * | sed 's/ / */'
69c3da625b4570f94889c9562453d394 *file1.ext
8046313ae98a6c9f1cb2c9957cdfbe7c *file2.ext
16250bebbd00e759138d09dd0cab0cb8 *file3.ext
d41d8cd98f00b204e9800998ecf8427e *file with space.ext

В этом случае команда sed просто заменяет первый [пробел] на [пробел] [звездочка]. Вы можете изменить выражение по мере необходимости, если вам нужно, чтобы оно велось по-другому.

0

Во-первых, вам не нужен tee , вы можете просто перенаправить в файл, используя > . Теперь добавление * требует некоторых хитростей. Вот пара:

  1. Perl

    md5 * | perl -pe 's/ / */' > checksum.txt
    

    Это то же самое, что ответ Теноркева, только что сделанный на Perl. Параметр -p означает обработку строки построчно, применение сценария, заданного параметром -e и печать. s/// является оператором подстановки и заменяет первый пробел пробелом, за которым следует * .

  2. чистая оболочка

    md5 * | while read a b; do echo "$a *$b"; done > checksum.txt
    

    Здесь while read a b будет читать каждую строку и разбивать ее на пустое пространство на переменные $a и $b . Это означает, что значение has будет $a а остальная часть строки будет переменной $b . Таким образом, печать (echo) $a *$b даст вам желаемый результат.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .