ifステートメントが正しく機能しません。

ifステートメントが正しく機能しません。

文字列を比較するループがありますが、一致するものがあってもまだ終了しません。設定にはさまざまな種類のファイル拡張子があり、維持したくない拡張子を削除したいと思います。ディレクトリに何があるかわからないより簡単な方法は、私が維持したいことを知らせ、残りは削除するようにすることです。動作しませんが、まだディレクトリとサブディレクトリのすべてのエントリを削除します。これは基本的にスクリプトで設定される方法です。今、2つのループがあります。

find "$working_dir" -type f -name "*.*" | while [ $xf  -lt $numberToConvert ] ; 
do read FILENAME;


echo "before loop"
echo "path1 is -> "${path1}""
echo "Ext1 is -> "$ext1""

#Checks each movie file to see if it is just a not needed
sample    of the move to regain file space by deleting it



   j=$FILENAME
   xpath=${j%/*} 
   xbase=${j##*/}
   xfext=${xbase##*.}
   xpref=${xbase%.*}
   path1=${xpath}
   pref1=${xpref}
   ext1=${xfext}

for file in "${path1}" ; do 

echo "in for loop ext1 is -> "$ext1"" 

  if [[ "$ext1" != 'flac' || "$ext1" != 'mp3'  ]]; then

    echo "in loop if statement ext is -> "$ext1""
    echo "Removing "$FILENAME""

    removeme="$FILENAME"
    rm -v "$removeme"

  fi
done

if [[ "${ext1}" == 'mp3' || "${ext1}" == 'flac' ]] ; then 
# other code to do stuff to mp3 and flac files here within the outter loop

 fi
 #outter loop done statement
 done 

項目の出力は次のとおりです。

before loop
path1 is -> /media/data/temp1/Joe Jackson - The Ultimate Collection/CD2
Ext1 is -> mp3

in for loop ext1 is -> mp3

in loop if statement ext is -> mp3
Removing /media/data/temp1/Joe Jackson - The Ultimate Collection/CD2/07 Joe Jackson - Be My Number Two.mp3
removed ‘/media/data/temp1/Joe Jackson - The Ultimate Collection/CD2/07 Joe Jackson - Be My Number Two.mp3’

Extension of before into first if statement foobar

Total Files Left are 41

2番目のifステートメントは機能し、mp3とflac入力のみを許可し、機能しています。ディレクトリからmp3やflac以外のファイルを削除するためにこの方法を使用することにしました。 var 名の周りに引用符 "$var" "$var" と角括弧 "${var}" を含め、if 文では [ ] と [[ ]] を含めて を考えてみます。何も動作しないようです。とにかくすべてが削除されます。私は文字列比較で==が等しく、!=が等しくないことをすでに知っています。

http://tldp.org/LDP/abs/html/comparison-ops.html

答え1

最初のテストのブール論理が間違っています。

if [[ "$ext1" != 'flac' || "$ext1" != 'mp3'  ]]

すべてファイル一致:拡張子が「mp3」の場合は"$ext1" != 'flac'trueです。

あなたはこれらのいずれかが欲しい

if [[ "$ext1" != 'flac' && "$ext1" != 'mp3'  ]]
if ! [[ "$ext1" == 'flac' || "$ext1" == 'mp3'  ]]
if [[ ! ("$ext1" == 'flac' || "$ext1" == 'mp3')  ]]

関連情報