Compare commits

..

No commits in common. "b069d30fa95aa95850d35a2c7200fce65df6f68d" and "8a9f48481f3de8077103b8f772f8cfb6205288ec" have entirely different histories.

2 changed files with 66 additions and 55 deletions

View File

@ -1,7 +1,2 @@
Working_Fullpath=$(pwd) Working_Fullpath=$(pwd)
Working_Directory=$(basename $Working_Fullpath) Working_Directory=$(basename $Working_Fullpath)
# IMPORTANT - The order of keys in keys_of_interest *must* match the order in
# which mdls prints them or csv output will be incoherent
keys_of_interest=("kMDItemFSCreationDate" "kMDItemFSName")

View File

@ -1,12 +1,9 @@
#!/usr/bin/env bash #!/usr/bin/env bash
log_file=/var/log/hash-files.log log_file=/var/log/hash-files.log
keys_of_interest=("kMDItemFSCreationDate" "kMDItemFSName")
md5_bin=$(which md5sum) md5_bin=$(which md5sum)
mktemp_bin=$(which mktemp) mktemp_bin=$(which mktemp)
DateTimeStamp=$(date +\%D_\%T) DateTimeStamp=$(date +\%D_\%T)
IFS=$'\n'
set -a set -a
source .env 2>&1 > /dev/null source .env 2>&1 > /dev/null
set +a set +a
@ -15,40 +12,67 @@ set +a
############ ############
write_log () { write_log () {
#echo " ++ Write to log.
# +++++++++++++++"
## Use on systems managed with systemd ## Use on systems managed with systemd
# printf 'hash-files: %s\n' "$1" | systemd-cat # printf 'hash-files: %s\n' "$1" | systemd-cat
printf '%s hash-files: %s\n' "$DateTimeStamp" "$1" >> $log_file printf '%s hash-files: %s\n' "$DateTimeStamp" "$1" >> $log_file
} }
create_list_of_files () {
#echo "=== Get list of files in $Working_Directory. ===
mdls_per_file () { #=================================================="
file=$1 IFS=$'\n'
unset mdls_properties for file in $(find $Working_Fullpath -maxdepth 1 -type f); do
for line in $(mdls $file); do list_of_files+=( $file )
old_IFS=$IFS done
unset IFS write_log "List of files created successfully."
mdls_key=$(printf "%s" $line | cut -d '=' -f 1) unset IFS
mdls_value=$(printf "%s" $line | cut -d '=' -f 2)
if [[ " ${keys_of_interest[*]} " =~ " ${mdls_key} " ]];then
IFS=$old_IFS
mdls_properties+=( $mdls_value )
unset IFS
else
: # "Did not print!"
fi
IFS=$old_IFS
done
IFS=',';echo "${mdls_properties[*]}";IFS=$old_IFS
} }
mdls_files () {
IFS=$'\n'
for file in $list_of_files; do
for line in $(mdls $file); do
mdls_key=$(printf "%s" $line | cut -d '=' -f 1)
mdls_value=$(printf "%s" $line | cut -d '=' -f 2)
printf "\n============================\nMDLS Key: %s\nMDLS Value: %s\n============================\n\n" $mdls_key $mdls_value
done
write_per_file () { done
# "=== Write data to a .csv file. === }
hash_files () {
#echo "=== Hash files. ===
#======================"
IFS=$'\n'
for file in ${list_of_files[@]}; do
hash=$($md5_bin $file | awk '{ print $1 }')
list_of_hashes+=( $hash )
done
write_log "Files hashed successfully."
unset IFS
}
create_csv () {
#echo "=== Create array of comma-separated-values. ===
#=================================================="
for i in ${!list_of_files[@]}; do
csv_array+=( ${list_of_files[i]},${list_of_hashes[i]} )
done
export csv_array
write_log "CSV Array creation successful."
}
write_data () {
#echo "=== Write data to a .csv file. ===
#====================================" #===================================="
temp_csv_file=$($mktemp_bin)
printf '%s,%s\n' "File Path" "File Hash" >> $temp_csv_file
for line in ${csv_array[@]};do
printf '%s\n' $line
done >> $temp_csv_file
# cat $temp_csv_file # cat $temp_csv_file
# write_log "$temp_csv_file written successfully." write_log "$temp_csv_file written successfully."
printf 'File: %s\nHash: %s\nMDLS Properties:\t%s\n' $1 $2 $3
} }
cleanup () { cleanup () {
@ -60,26 +84,18 @@ cleanup () {
trap cleanup EXIT trap cleanup EXIT
## Create temp file echo "Main Start"
temp_csv_file=$($mktemp_bin) create_list_of_files
## Initialize column names mdls_files
csv_columns=( "File Path" "File Hash" ) #hash_files
## Populate Columns from keys of interest #if [ ${#list_of_files[@]} != ${#list_of_hashes[@]} ];then
for key in ${keys_of_interest[@]};do # echo "Error! Number of files and hashes differs. Exiting..." && exit
csv_columns+=( $key ) #else
done # create_csv
## Print columns to first line of csv #fi
# "======= CSV Column Headers ========" #write_data
{ IFS=',';echo "${csv_columns[*]}";IFS=$'\n'
## Loop through files, writing to csv #while $list_of_files >=1; do
for file in $(find $Working_Fullpath -maxdepth 1 -type f); do #done
## Set our hash value
hash=$($md5_bin $file | awk '{ print $4 }')
# Print csv row output
# "============= CSV Row =========="
echo "$file,$hash,$(mdls_per_file $file)"
# write_per_file $file $hash $mdls_properties
done
} >> $temp_csv_file
cat $temp_csv_file
unset IFS