1

アクセスされるファイルは配列に保持され、アーカイブ ファイルはオンライン バックアップに備えて小さなサイズに分割されます。分割コマンドのループを通じて、各反復の終了コードを取得しようとしています。ただし、 が返さExit Code 1れますが、操作は成功したと表示されます。なんで?

#!/bin/bash
declare -a SplitDirs
declare -a CFiles
CDIR=/mnt/Net_Pics/Working/Compressed/
SDIR=/mnt/Net_Pics/Working/Split/
Err=/mnt/Net_Pics/Working
SplitDirs=(`ls -l "$CDIR" --time-style="long-iso" | egrep '^d' | awk '{print $8}'`)
for dir in "${SplitDirs[@]}"
do
  if [ ! -d "$SDIR""$dir" ]; then
mkdir "$SDIR""$dir"
  else continue
  fi
CFiles=(`ls -l "$CDIR$dir" --time-style="long-iso" | awk '{print $8}'`)
  for f in "${CFiles[@]}"
  do
  if [ ! -e "$SDIR""$dir"/"$f" ]; then 
    split -d -a 4 -b 1992295 "$CDIR""$dir"/"$f" "$SDIR""$dir"/"$f" --verbose
    if [[ "$?" == 1 ]]
    then
      rm -rf "$SDIR""$dir" && echo "$SDIR""$dir" "Removed due to Error code" "$?""." "Testing Archives and Retrying..." 2>&1 | tee "$Err"/Split_Err.log
      7z t "$CDIR""$dir"/"$f" >> tee stdout.log 2>> "$Err"/"$dir"/7z_Err.log >&2
      mkdir "$SDIR""$dir" && split -d -a 4 -b 1992295 "$CDIR""$dir"/"$f" "$SDIR""$dir"/"$f" --verbose
       if [[ "$?" == 1 ]]
       then
          rm -rf "$SDIR""$dir" && echo "$SDIR""$dir" "Removed a second time due to Error code "$?". Skipping..." 2>&1 | tee "$Err"/Split_Err.log
          continue
       else
          echo "Split Success:" "$SDIR""$dir"/"$f" "ended with Exit status" "$?" && continue
       fi
    else
      echo "Split Success:" "$SDIR""$dir" "ended with Exit status" "$?" && continue
    fi 
  else
    echo "$SDIR""$dir"/"$f" "Exists... Skipping Operation" 2>&1 | tee "$Err"/"$dir"/Split_Err.log
    continue
  fi
  done

(質問の以前のリビジョンのエコーパイピングはコードの配置が間違っていました。それを指摘してくれてありがとう。ただし、終了コードは同じままです。全体として、スクリプトは終了コード部分を除いて、私がやりたいことを実行します。)

4

1 に答える 1

1

削除し| echo $?ます。echoコマンド(最後のコマンド)のリターンコードを処理しています。

于 2012-05-26T05:18:40.890 に答える