Como o Automator ou o Applescript podem rodar 500.000 imagens em pastas e subpastas?

2

Eu tenho uma pergunta muito específica.

Eu tenho 500.000 imagens que estão em 98 subpastas. Algumas das subpastas contêm 25.000 imagens.

Existe algum fluxo de trabalho de script / automação que eu possa usar?

Eu estava tentando criar um fluxo de trabalho:

  1. Pedir itens do Finder
  2. Obter o conteúdo da pasta (assinalar repetição para cada subpasta encontrada)
  3. Rodar imagens

Funciona bem, mas apenas para essas pastas onde há menos de 4.096 arquivos: Eu normalmente recebo a seguinte mensagem de erro:

Rotate images failed - 1 error too many arguments (12019) -- limit is 4096

Existe alguma maneira de aumentar esse limite ou criar um roteiro de maçã completamente diferente? Eu realmente espero que alguém me ajude com isso.

    
por Ludi 01.12.2012 / 14:38

4 respostas

3

Se você não é obrigado a usar o Automator ou AppleScript, basta usar ImageMagick através do shell. Você pode instalar o ImageMagick através de MacPorts , Homebrew ou a distribuição oficial .

Para isso, chamaremos find . Se você quiser ver os nomes das imagens primeiro, antes de convertê-los, insira um echo entre -execdir e convert .

Aqui está o comando:

find /some/path/ -type f -iname "*.jpg" -execdir convert {} -rotate 90 rot_{} \;

Isso vai recursivamente ...

  • pesquisa /some/path
  • para arquivos
  • com o nome *.jpg
  • chame convert do ImageMagick, com o caminho de trabalho definido como o da imagem ( execdir )
  • gire-os em 90 graus
  • salve-os em rot_ + o nome de arquivo original

Como find chamará convert para cada imagem separadamente, não importa quantos arquivos realmente existam.

    
por 01.12.2012 / 15:28
0

Você pode simplesmente usar goles ...

Supondo que todos os arquivos nas pastas são um arquivo de imagem:

set mainFolder to POSIX path of (path to desktop as text) & "My Folder"
do shell script "find " & quoted form of mainFolder & " \! -name \".*\" -type f -print0 | xargs -0 sips -r 90"
    
por 01.12.2012 / 22:44
0

Você pode usar o jpegtran para girar as imagens sem perdas. Pode ser instalado com brew install libjpeg .

IFS=$'\n'
for f in $(find ~/Folder -iname '*.jpg'); do
    /usr/local/bin/jpegtran -rotate 90 "$f" > "$f.temp"
    [[ $? == 0 ]] && mv "$f.temp" "$f" || echo "$f"
done
    
por 02.12.2012 / 12:31
0

Outra opção é Hazel . Você diz a Hazel que pastas (e subpastas) devem ser verificadas, define os critérios para os arquivos a serem processados e as ações a serem tomadas (incluindo scripts, scripts de shell e fluxos de trabalho) e Hazel faz o resto.

    
por 19.01.2013 / 17:46