Como você copia arquivos usando ditto com barras invertidas em nomes de arquivos

0

Estou escrevendo um script para copiar arquivos com caracteres não suportados pelo Office365 para uma pasta de cache no OSX antes de remover os caracteres (essa parte é omitida). Isso funciona, exceto no caso de arquivos como:

p\ophaddy.jpg

onde idem interpreta a barra invertida como um espaço e falha compreensivelmente. Tentando descobrir a maneira mais eficiente de fazer isso.

find $HOME  -not \( -path "$HOME/Library" -prune \) -not \( -path "$HOME/Cache" -prune \) -not \( -path "$HOME/.Trash" -prune \)  -name "*[<>:/|?#%\\]*" -exec bash -c 'x="{}" && echo $x && ditto "$x" $HOME/Cache/ ; y=$(sed "s/[<>:|?#%\\]\+/-/g" <<< "$x")   ' \;
    
por rndy 14.10.2016 / 16:44

1 resposta

0

Eu uso o Ubuntu, então não tenho ditto , mas o seguinte deve funcionar:

find $HOME  -not \( -path "$HOME/Library" -prune \) \
            -not \( -path "$HOME/Cache" -prune \) \
            -not \( -path "$HOME/.Trash" -prune \) \
            -name "*[<>:/|?#%\\]*" | while read -r; \
  do cp --parent --preserve-all "${REPLY}" "$HOME/Cache/${REPLY/[<>:|?#%\]/-}"; \
  done

Notas: -

  • Eu espalhei o comando em várias linhas para legibilidade.
  • Isso não faz exatamente o que você estava tentando alcançar: o acima substitui cada caractere inválido individual por - , enquanto você tenta substituir cada seqüência de caracteres inválidos por um único - , embora ambos rendam Office- arquivos compatíveis.
  • Em geral, prefiro canalizar para read , em vez de -exec bash /c ... , que precisa de muito cuidado com o uso de cotação e escape.
por 14.10.2016 / 20:13