Remover todos os caracteres ilegais de todos os nomes de arquivos em uma determinada pasta e subpastas

4

Eu sei que isso foi basicamente respondido e o automator com o shell script (Sanitize Filenames) funciona muito bem, mas eu preciso que ele também faça todas as subpastas também. E, se possível, reduza o nome do arquivo para 50 caracteres, mantendo a extensão do arquivo. Eu encontrei uma linha de código bash que truncou o arquivo, mas também removeu a extensão e que não funciona bem ao transferir esses arquivos do Mac para o Windows.

O script, tal como está, é este

for f in "$1"/*; do
dir=$(dirname "$f")
file=$(basename "$f")
mv "$f" "${dir}/${file//[[:cntrl:]\\/:*?\"<>|]/_}" 
done 

Não me oponho a usar o applescript no automator para concluir esta tarefa.

    
por Tim Moseley 11.03.2016 / 15:08

1 resposta

0

Você pode usar find . As opções em find do OSX / Darwin são ligeiramente diferentes daquelas em outras variantes * nix, então alguns desses recursos podem não estar disponíveis para você, mas você obterá a essência e poderá jogar com as opções que você tem disponíveis:

find -regextype posix-extended -regex '.*\/[^\/]*[[:cntrl:]\:*?"<>|].*' -print \
  -exec mv "{}" "$(echo "{}" | perl -ane 'chomp; s/[[:cntrl:]\:*?"<>|]//g; print' -)"
    
por 04.04.2016 / 13:27