Ответ 1
Использование 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
отвечает за параметры разбора. Подробнее см. этот ответ. Вторая половина содержит пояснительные комментарии.