Использование md5deep
md5deep -r path/to/dir > sums.md5
Использование find
и md5sum
find relative/path/to/dir -type f -exec md5sum {} + > sums.md5
Имейте в виду, что при запуске проверки на ваших MD5 сумм с md5sum -c sums.md5
, вам нужно запустить его из того же каталога, из которого вы создали файл sums.md5
. Это связано с тем, что find
выводит пути, относящиеся к вашему текущему местоположению, которые затем помещаются в файл sums.md5
.
Если это проблема, вы можете сделать абсолютное значение relative/path/to/dir
(например, положив $PWD/
перед вашей дорогой). Таким образом, вы можете запустить проверку на sums.md5
из любого места. Недостатком является то, что теперь sums.md5
содержит абсолютные пути, что делает его больше.
Полнофункциональный функция с помощью find
и md5sum
Вы можете поместить эту функцию в файл .bashrc
(находится в вашем $HOME
каталоге):
function md5sums {
if [ "$#" -lt 1 ]; then
echo -e "At least one parameter is expected\n" \
"Usage: md5sums [OPTIONS] dir"
else
local OUTPUT="checksums.md5"
local CHECK=false
local MD5SUM_OPTIONS=""
while [[ $# > 1 ]]; do
local key="$1"
case $key in
-c|--check)
CHECK=true
;;
-o|--output)
OUTPUT=$2
shift
;;
*)
MD5SUM_OPTIONS="$MD5SUM_OPTIONS $1"
;;
esac
shift
done
local DIR=$1
if [ -d "$DIR" ]; then # if $DIR directory exists
cd $DIR # change to $DIR directory
if [ "$CHECK" = true ]; then # if -c or --check option specified
md5sum --check $MD5SUM_OPTIONS $OUTPUT # check MD5 sums in $OUTPUT file
else # else
find . -type f ! -name "$OUTPUT" -exec md5sum $MD5SUM_OPTIONS {} + > $OUTPUT # Calculate MD5 sums for files in current directory and subdirectories excluding $OUTPUT file and save result in $OUTPUT file
fi
cd - > /dev/null # change to previous directory
else
cd $DIR # if $DIR doesn't exists, change to it to generate localized error message
fi
fi
}
После запуска source ~/.bashrc
, вы можете использовать md5sums
как нормальный команда:
md5sums path/to/dir
будет генерировать checksums.md5
файл в каталоге path/to/dir
, содержащий MD5 суммы всех файлов в этой директории и подкаталогах. Использование:
md5sums -c path/to/dir
проверить суммы из path/to/dir/checksums.md5
файла.
Отметьте, что path/to/dir
может быть относительным или абсолютным, md5sums
будет работать в любом случае. Результат checksums.md5
Файл всегда содержит пути относительно path/to/dir
. Вы можете использовать другое имя файла, а затем по умолчанию checksums.md5
, предоставив -o
или --output
. Все варианты, кроме -c
, --check
, -o
и --output
переданы md5sum
.
Первая часть определения md5sums
отвечает за варианты синтаксического анализа. См. this answer для получения дополнительной информации. Вторая половина содержит пояснительные комментарии.
Я бы порекомендовал 'find/path-type f -print0 | xargs -0 md5sum', чтобы иметь дело с именами файлов, которые в противном случае могли бы быть непреднамеренно разделены из-за пробелов ... – twalberg
@twalberg Хорошая точка, спасибо! Я обновляю ответ. – taskalman
Спасибо @taskalman. «Вы можете создать путь и вывести имя файла из $ 1, если мы поместим его в ваш скрипт. Обратите внимание, что вам придется обрабатывать косые черты в вашем параметре пути, чтобы сделать его частью имени файла в вашем скрипте». Не могли бы вы объяснить это немного дальше? Я не совсем понимаю, что вы имеете в виду. – Bleakley