문자열을 비교하는 루프가 있는데 일치하는 항목이 있어도 여전히 종료되지 않습니다. 설정에는 다양한 유형의 파일 확장자가 있으며 유지하고 싶지 않은 확장자를 제거하고 싶습니다. 디렉토리에 무엇이 있는지 모르는 더 쉬운 방법은 내가 유지하고 싶은 것을 알려주고 나머지는 삭제하도록 하는 것입니다. 작동하지 않지만 여전히 디렉터리와 하위 디렉터리의 모든 항목을 삭제합니다. 이것은 기본적으로 스크립트에서 설정되는 방식입니다. 이제 두 개의 루프가 있습니다.
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 문에서는 [ ] 및 [[ ]]를 포함하여 를 생각해 보십시오. 아무것도 작동하지 않는 것 같습니다. 어쨌든 모든 것이 삭제됩니다. 나는 문자열 비교에서 ==가 같고 !=가 같지 않다는 것을 이미 알고 있습니다.
답변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') ]]