genisoimageが成功したことを確認する

genisoimageが成功したことを確認する

私はすべてのVIDEO_TSディレクトリを.ISOに変換するスクリプトを使用します。 genisoimageが失敗し、次のフォルダを変換するのではなく、実際に変換するかどうかを確認するには?

変換後にフォルダを削除するコマンドがありますが、genisoimageが失敗した場合はまだ削除されます。

#!/bin/bash
iso_name=""
parent_path=""
full_path=""
total=0

IFS=$'\n'
clear

for file in $(find /shares/media/ -type d -name 'VIDEO_TS')
do

parent_path="$(dirname -- "$file")"
full_path="$file"
iso_name="$(basename -- "$parent_path").ISO"
iso_path=""$(dirname -- "$parent_path")"/"$iso_name""

echo "Converting to "$iso_name""

((total++))
genisoimage -allow-limited-size -o  "$iso_path" -dvd-video "$parent_path"
rm -rf "$parent_path" 

done

echo "Succesfully converted "$total" videos to ISO!"

ベストアンサー1

すべてのプロセスに終了ステータス、0から255までの数字です。ほとんど普遍的に従う規則があります。 0 は成功を意味し、他の値は失敗を意味します。

シェルスクリプトでは、特殊変数には$?最後のコマンドの終了ステータスが含まれます。複数回使用する必要がある場合は、別の変数に保存してください。それ以外の場合、それを使用する最初のコマンドはその$?状態を設定します。

一般的にそうする必要はありません$?。シェルの条件付き構成を活用して、ゼロとゼロ以外のものに異なる方法で応答できます。

if genisoimage …; then
  rm rm -rf "$parent_path"
else
  echo 1>&2 "genisoimage failed, aborting"
  exit 2
fi

シャットダウンモードでスクリプトをエラーに切り替えるために使用できますset -e。単純なコマンドが失敗した場合(つまり、ゼロ以外の状態を返す場合)、スクリプトはすぐに同じ終了状態で終了します。たとえば、ループset -eの前に位置を指定すると、forスクリプトがgenisoimage失敗した場合はすぐに終了します。

ループを続行して失敗を記録するには、現在のエラー数を変数に保存します。

successes=0
failures=0
err=0
for file in $(find /shares/media/ -type d -name 'VIDEO_TS')
do
  parent_path="$(dirname -- "$file")"  # or parent_path=${file%/*}
  iso_path="$parent_path.ISO"
  echo "Converting to "$iso_name""
  genisoimage -allow-limited-size -o "$iso_path" -dvd-video "$parent_path"
  ret=$?
  if ((ret == 0)); then
    rm -rf "$parent_path"
    ((++successes))
  else
    ((++failures))
    if ((ret > err)); then ret=$err; fi
  fi
done
echo "Succesfully converted "$total" videos to ISO. There were $failures failures."
exit $err

1検索コマンドの場合、grep0 は「検出済み」を意味し、1 は「見つかりません」を意味し、その他の値は「一部エラーが発生しました」を意味します。

おすすめ記事