You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
2.0 KiB

#!/usr/bin/env bash
log_file=/var/log/mdlspipe.log
Working_Fullpath=$(pwd)
Working_Directory=$(basename $Working_Fullpath)
keys_of_interest=("kMDItemFSCreationDate" "kMDItemFSName")
md5_bin=$(which md5sum)
mktemp_bin=$(which mktemp)
DateTimeStamp=$(date +\%D_\%T)
IFS=$'\n'
set -a
source .env 2>&1 > /dev/null
set +a
## Functions
############
write_log () {
## Use on systems managed with systemd
# printf 'mdlspipe: %s\n' "$1" | systemd-cat
printf '%s mdlspipe: %s\n' "$DateTimeStamp" "$1" >> $log_file
}
mdls_per_file () {
file=$1
unset mdls_properties
for line in $(mdls $file); do
old_IFS=$IFS
unset IFS
mdls_key=$(printf "%s" $line | cut -d '=' -f 1)
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
}
write_per_file () {
# "=== Write data to a .csv file. ===
#===================================="
# cat $temp_csv_file
# write_log "$temp_csv_file written successfully."
printf 'File: %s\nHash: %s\nMDLS Properties:\t%s\n' $1 $2 $3
}
cleanup () {
write_log "Cleanup completed successfully."
}
## Main
#######
trap cleanup EXIT
## Create temp file
temp_csv_file=$($mktemp_bin)
## Initialize column names
csv_columns=( "File Path" "File Hash" )
## Populate Columns from keys of interest
for key in ${keys_of_interest[@]};do
csv_columns+=( $key )
done
## Print columns to first line of csv
# "======= CSV Column Headers ========"
{ IFS=',';echo "${csv_columns[*]}";IFS=$'\n'
## Loop through files, writing to csv
for file in $(find $Working_Fullpath -maxdepth 1 -type f); do
## 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
unset IFS
mv $temp_csv_file $PWD/mdlspipe_$(date +%\D_\%T|sed 's/[:|\/]/-/g').csv