se a instrução não estiver funcionando corretamente

0

Eu tenho um loop comparando strings que ele ainda não chuta se combina. a configuração é de muitos tipos diferentes de extensões de arquivo, só quero excluir as que eu não quero manter as que eu quero. Rota mais fácil é não saber o que está no dir é dizer o que eu quero manter, em seguida, basta apagar o resto. ele não funciona ainda exclui tudo dentro do dir e sub dirs. É assim que é basicamente configurado dentro do script com dois loops dentro dele agora,

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 

saída do termo é:

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

a segunda instrução se funciona foi apenas deixando em mp3 e flac, e tem funcionado eu decidi tentar isso para se livrar do resto dos arquivos que não são mp3 ou flac dentro dos diretórios agora, e, eu Eu tentei todas as variações que eu posso pensar com as marcas de cotação '$ var' "$ var" e colchetes "$ {var}" em torno do nome var e o [] e [[]] na instrução if. nada parece funcionar. apenas apaga tudo, não importa o quê. Eu já sei que == é igual a e! = Não é igual a na comparação de string.

link

    
por uxserx-bw 20.11.2015 / 18:11

1 resposta

2

A lógica booleana do seu primeiro teste está errada:

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

Todo arquivo corresponde a: se sua extensão for "mp3", então "$ext1" != 'flac' é verdadeiro.

Você quer um dos

if [[ "$ext1" != 'flac' && "$ext1" != 'mp3'  ]]
if ! [[ "$ext1" == 'flac' || "$ext1" == 'mp3'  ]]
if [[ ! ("$ext1" == 'flac' || "$ext1" == 'mp3')  ]]
    
por 20.11.2015 / 18:26