Использование обычных команд с символическими ссылками очень сложно. Команда 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
.
Первый аргумент printf
будет интерпретирован как строка форматирования, а % &
- недопустимый спецификатор формата.
Попробуйте вместо этого:
printf '%s' "$V"
Форматирование, которое выполняет printf
, должно быть объяснено в руководстве printf (1)
или в руководстве к вашей оболочке. Формат % s
просто означает «ожидать строку». Утилита printf
по умолчанию не добавляет новую строку.