printf «$ V» не работает, если он: '^ +% & /% + ^

Использование обычных команд с символическими ссылками очень сложно. Команда find справляется с ними довольно хорошо. Таким образом, ключ в том, чтобы использовать find, и я бы предложил использовать быструю CRC или криптографическую хеш-функцию в зависимости от ваших потребностей.

Так что что-то вроде этого должно работать (вы можете делать дополнения по мере необходимости)

find -L www -type f -exec cksum {} \; | cut -d ' ' -f1-2 | md5sum

Если вы хотите криптографическую поддержку ваших контрольных сумм,

find -L www -type f -exec sha256sum {} \; | cut -d ' ' -f1 | sha256sum

Требуется идентификатор 'type', потому что sha256 работает только с файлами и ошибками для каталогов. , а разрез используется только для передачи контрольной суммы/хэша в конечную функцию и предотвращения ложных срабатываний, когда на самом деле отличаются только имена путей.

Примечание. Это не удастся, если символическая ссылка не является относительной и если две системы не имеют точно такого же пути, что может произойти, если символическая ссылка указывает за пределы каталога, в котором вы работаете find.

0
21.02.2017, 13:38
1 ответ

Первый аргумент printf будет интерпретирован как строка форматирования, а % & - недопустимый спецификатор формата.

Попробуйте вместо этого:

printf '%s' "$V"

Форматирование, которое выполняет printf , должно быть объяснено в руководстве printf (1) или в руководстве к вашей оболочке. Формат % s просто означает «ожидать строку». Утилита printf по умолчанию не добавляет новую строку.

5
28.01.2020, 02:16

Теги

Похожие вопросы