added sparsecmp.sh
This commit is contained in:
50
tools/sparsecmp.sh
Normal file
50
tools/sparsecmp.sh
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Function to get size of file or block device
|
||||||
|
get_size() {
|
||||||
|
if [ -b "$1" ]; then # Check if input is a block device
|
||||||
|
size=$(sudo blockdev --getsize64 "$1")
|
||||||
|
else # Assume input is a file
|
||||||
|
size=$(stat --format="%s" "$1")
|
||||||
|
fi
|
||||||
|
echo $size
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if at least two arguments are provided
|
||||||
|
if [ $# -lt 2 ]; then
|
||||||
|
echo "Usage: $0 <source> <target> [test count]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
source="$1"
|
||||||
|
target="$2"
|
||||||
|
count="${3:-100}" # Default to 100 tests if not specified
|
||||||
|
|
||||||
|
# Ensure the source and target exist
|
||||||
|
if [ ! -e "$source" ] || [ ! -e "$target" ]; then
|
||||||
|
echo "Error: Source or target does not exist."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
size=$(get_size "$source") # Get size in bytes
|
||||||
|
if [ $? -ne 0 ] || [ -z "$size" ] || [ "$size" -eq 0 ]; then
|
||||||
|
echo "Error: Failed to get size of the source."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
interval=$((size / count))
|
||||||
|
|
||||||
|
for ((i=0; i<count; i++)); do
|
||||||
|
offset=$((i * interval))
|
||||||
|
percent=$((i * 100 / count))
|
||||||
|
# Use printf to overwrite the current line with the offset and percentage
|
||||||
|
printf "\r%$(tput cols)s\rComparing at offset $offset... (${percent}%%)"
|
||||||
|
if ! cmp --bytes=1M "$source" "$target" --ignore-initial=$offset > /dev/null 2>&1; then
|
||||||
|
echo -e "\nMismatch or error at offset $offset"
|
||||||
|
exit 1 # Exit after the first mismatch
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Clear the line after the loop finishes successfully and print success message
|
||||||
|
printf "\r%$(tput cols)s\r"
|
||||||
|
echo "No mismatches found."
|
||||||
Reference in New Issue
Block a user