if 문이 제대로 작동하지 않습니다.

if 문이 제대로 작동하지 않습니다.

문자열을 비교하는 루프가 있는데 일치하는 항목이 있어도 여전히 종료되지 않습니다. 설정에는 다양한 유형의 파일 확장자가 있으며 유지하고 싶지 않은 확장자를 제거하고 싶습니다. 디렉토리에 무엇이 있는지 모르는 더 쉬운 방법은 내가 유지하고 싶은 것을 알려주고 나머지는 삭제하도록 하는 것입니다. 작동하지 않지만 여전히 디렉터리와 하위 디렉터리의 모든 항목을 삭제합니다. 이것은 기본적으로 스크립트에서 설정되는 방식입니다. 이제 두 개의 루프가 있습니다.

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

두 번째 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')  ]]

관련 정보