web-dev-qa-db-ja.com

シェル出力の最終行を変数として取得します

特定のフォルダーに含まれる写真のいくつかのexifタグを自動的に変更するためにexiftoolを使用してシェルスクリプトに取り組んでいます。出力を使用して、NAS(a QNAP)ジョブが完了したとき。

すべてがすでに機能していますが、-通知システムがメッセージを切り捨てるので、必要な情報、つまりシェル出力の最後の行、たとえば次のものだけを受け取りたいです:

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

問題は、現在、次の通知しか受信しないことです。

Exiftool cronjobがカメラで完了しました:4512ファイルが失敗しました

代わりに取得したいのは:

Exiftool cronjobがカメラで完了しました:177個の画像ファイルが更新されました

スクリプトは次のとおりです。

#!/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

それを行うには、|を使用して$ OUTPUT変数を使用しました。テール-1、しかしおそらく私はいくつかの基本的なエラーを犯し、次のようなものを受け取ります:

Exiftool cronjobがカメラで完了しました:4512ファイルが失敗しました|尾-1

正しい方法でそれを行うには?ありがとう

16
giopas

捕獲括弧の内側に尾を置きます。

OUTPUT=$(exif ... | tail -1)

ここでは二重引用符は必要ありません。私はあなたが試したことを推測しています

OUTPUT="$(exif ...) | tail -1"
31
user464502

おそらく古い投稿がすぐに回答しますが、-nフラグ(tail --helpを参照)を使用して、ティックを使用してコマンド出力をラップしてみてください。

OUTPUT=`exif ... | tail -n 1`

(tailコマンドはパラメータ「-1」を認識しないため、user464502の答えは私にとっては機能しませんでした)

15
IanK.CO