Você está complicando isso.
Se zip sair com um status de saída que reflita sucesso ou falha, você pode simplesmente fazer
$ zip -r foo.zip . && mv foo.zip mydir && rm -rf *
No entanto, espero que mydir não esteja localizado no diretório atual ou seja excluído pelo rm -rf * . Em geral, ao usar rm -rf , eu pensaria duas e três vezes antes de colocar um * depois dele !! Na verdade, posso contar o número de vezes que fiz ( rm -rf * ) no ano passado nos dedos de uma mão. Eu nunca colocaria em um script.
Caminho mais seguro (supondo que mydir seja realmente um caminho para algum outro lugar que não o diretório atual):
$ zip -r --move --test foo.zip . && mv foo.zip mydir
Ou até mesmo
$ zip -r --move --test mydir/foo.zip .
Observe o uso de . (ponto) em vez de * . Com * , qualquer arquivo com - como o primeiro caractere em seu nome seria interpretado como uma opção de linha de comando para zip . Teste isso criando um arquivo chamado --encrypt , por exemplo:
$ touch -- --encrypt
$ zip -r --move --test ../test.zip *
Enter password:
$ rm -- --encrypt