文字列を比較するループがありますが、一致するものがあってもまだ終了しません。設定にはさまざまな種類のファイル拡張子があり、維持したくない拡張子を削除したいと思います。ディレクトリに何があるかわからないより簡単な方法は、私が維持したいことを知らせ、残りは削除するようにすることです。動作しませんが、まだディレクトリとサブディレクトリのすべてのエントリを削除します。これは基本的にスクリプトで設定される方法です。今、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 文では [ ] と [[ ]] を含めて を考えてみます。何も動作しないようです。とにかくすべてが削除されます。私は文字列比較で==が等しく、!=が等しくないことをすでに知っています。
答え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') ]]