Как изменить разделитель вывода команды md5sum - PullRequest
2 голосов
/ 11 октября 2011

Мой код выглядит следующим образом:

for i in `find` ; 
do
    if [ -f $i ]; then
        if [ "$i" != "./ex.sh" ]; then
            md5sum $i >> checksums.txt;
        fi
    fi
done

Проблема в том, что я хочу использовать awk для файла позже с "|"в качестве разделителя.Однако я не знаю, как добавить к файлу Checkums.txt с "|"между md5sum и $ i.Спасибо

Ответы [ 3 ]

2 голосов
/ 11 октября 2011

Включая этот вопрос, я прочитал по крайней мере 3 вопроса от вас относительно той же проблемы. Я полагаю, вы хотите найти все дубликаты файлов в некотором каталоге, верно?

тогда вы можете попробовать одну строку ниже, это сохранит ваши последующие циклы или двойные циклы и обработку awk:

find {what you want to find comes here} -exec md5sum '{}' \; | sort | uniq -d -w 33

в нем будут перечислены дублированные имена md5sum и имена файлов.

если мое предположение было неверным, просто проигнорируйте мой ответ.

1 голос
/ 11 октября 2011

md5sum (по крайней мере, версия в GNU coreutils) не предоставляет опции для управления форматом вывода. Вам следует изменить скрипт awk, чтобы символы 0 ... 15 обрабатывались как md5sum, а символы 18 до конца строки - как имя файла. Если вам действительно нужен конкретный формат, вы должны проанализировать вывод md5sum. Например:

user@host:~$ md5sum "/dev/null" | python -c 'import sys; s = sys.stdin.read(); print s[0:32] + "|" + s[34:],'
d41d8cd98f00b204e9800998ecf8427e|/dev/null

Кроме того, вы должны заключать аргумент в md5sum в кавычки (md5sum "$i"). Как написано, сценарий не будет работать, если есть какие-либо имена файлов, содержащие пробелы или специальные символы.

1 голос
/ 11 октября 2011

Используйте это:

md5sum  $i | tr -s " " | tr " " "|" >> checksums.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...