I am working on a shell script with exiftool to automatically change some exif tags on pictures contained in a certain folder and I would like to use the output to get a notification on my NAS (a QNAP) when the job is completed.
Everything works already, but - as the notification system truncates the message - I would like to receive just the information I need, i.e. the last line of the shell output, which is for example the following:
Warning: [minor] Entries in IFD0 were out of sequence. Fixed. - 2015-07-12 15.41.06.jpg 4512 files failed condition 177 image files updated
The problem is that currently I only receive the following notification:
Exiftool cronjob completed on Camera: 4512 files failed condition
What I would like to get instead is:
Exiftool cronjob completed on Camera: 177 image files updated
The script is the following:
#!/bin/sh # exiftool script for 2002 problem dir="/share/Multimedia/Camera" cd "$dir" FOLDER="$(printf '%s\n' "${PWD##*/}")" OUTPUT="$(exiftool -overwrite_original -r '-CreateDate<DateTimeOriginal' -if '$CreateDate eq "2002:12:08 12:00:00"' -if '$DateTimeOriginal ne $CreateDate' *.[Jj][Pp][Gg])" /sbin/notice_log_tool -a "Exiftool cronjob completed on ${FOLDER}: ${OUTPUT}" --severity=5 exit 0
To do that I played with the $OUTPUT variable using | tail -1, but probably I make some basic errors and I receive something like:
Exiftool cronjob completed on Camera: 4512 files failed condition | tail -1
How to do it in the right way? Thanks
To look at the last few lines of a file, use the tail command. tail works the same way as head: type tail and the filename to see the last 10 lines of that file, or type tail -number filename to see the last number lines of the file.
${str##*$'\n'} will remove the longest match till \n from start of the string thus leaving only the last line in input.
Use the tail command to write the file specified by the File parameter to standard output beginning at a specified point. This displays the last 10 lines of the accounts file. The tail command continues to display lines as they are added to the accounts file.
Put the tail inside the capturing parens.
OUTPUT=$(exif ... | tail -1)
You don't need the double quotes here. I'm guessing that you tried
OUTPUT="$(exif ...) | tail -1"
Probably an old post to be answering now, but try using the -n flag (see tail --help) and wrap the command output using ticks.
OUTPUT=`exif ... | tail -n 1`
(user464502's answer did not work for me as the tail command does not recognize the parameter "-1")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With