O -c flag de descompactar significa extrair arquivos para stdout / screen , portanto nenhum arquivo é realmente gravado em disco e, portanto, a opção -d não tem sentido - também pode explicar os caracteres estranhos você está vendo no terminal. Talvez você esteja pensando no modificador -C ( correspondência insensível a maiúsculas e minúsculas )?
Em vez de usar grep , provavelmente o que você deseja é fornecer uma lista opcional de membros do archive a serem processados após o zipfile: também é provável que você use o estilo Unix / path separators , mesmo se a origem do zipfile for um sistema Windows.
Finalmente, "/ ~ / Music" provavelmente será interpretado como um caminho absoluto literal; você provavelmente precisará de ~/Music/ ou "$HOME/Music/" - o último formulário sendo mais facilmente modificado para segmentar diretórios com espaços neles, por exemplo "$HOME/My Music/"
unzip -C "$file" '*/Username/Music/*' -d "$HOME/Music/"
No entanto, isso provavelmente resultará em uma estrutura de pastas como ~/Music/Username/Music/somefile , que pode não ser o que você pretende. AFAIK unzip não tem a mesma flexibilidade para remover os principais componentes de diretório que algumas implementações de tar fazem, no entanto, você pode querer olhar para o modificador -j .