Applescript con cada bucle de archivo falla

0

Quiero ejecutar un script en todos los archivos con dos extensiones específicas en un disco con una jerarquía de varias carpetas anidadas. Mi script funciona bien cuando elijo una carpeta más abajo en la línea con menos subcarpetas, pero me gustaría ejecutarlo en un archivo completo con más de mil carpetas. AppleScript tarda una eternidad en get todos los archivos y luego sale sin devolver nada y sin ejecutar las operaciones después de obtener los archivos. No hay mensaje de tiempo de espera, no hay mensaje de error. Y el Finder deja de responder (y permanece bloqueado después de que el script se cierra).

set myFolder to choose folder with prompt "Choose a folder:"
    tell application "Finder"
        try
            set eafFiles to (every file in entire contents of myFolder whose name ends with ".eaf") as alias list
        on error
            try
                set eafFiles to ((every file in entire contents of myFolder whose name ends with ".eaf") as alias) as list
            on error
                set eafFiles to {}
            end try
        end try
        try
            set pfsxFiles to (every file in entire contents of myFolder whose name ends with ".pfsx") as alias list
        on error
            try
                set pfsxFiles to ((every file in entire contents of myFolder whose name ends with ".pfsx") as alias) as list
            on error
                set pfsxFiles to {}
            end try
        end try
        set myFiles to eafFiles & pfsxFiles
    end tell

    repeat with CurrentFile in myFiles
        set CurrentFile to CurrentFile as string

        do shell script "perl /path/to/perl/script.pl " & quoted form of CurrentFile
    end repeat
    
pregunta jan 26.05.2016 - 10:14

2 respuestas

1

File :: Find de Perl es ideal para iterar sobre todos los archivos en una carpeta. Este enfoque trata con un archivo a la vez, es rápido y eficiente en memoria.

Use AppleScript para presentar la opción de carpeta y luego pase la ruta de la carpeta seleccionada a su script de Perl:

set myFolder to choose folder with prompt "Choose a folder:"
do shell script "perl /path/to/perl/script.pl " & quoted form of POSIX path of myFolder

La secuencia de comandos de Perl puede tratar de atravesar los archivos. A continuación se muestra un ejemplo de secuencia de comandos de perl para iterar sobre archivos y filtrar solo a los sufijos eaf y pfsx :

#!/usr/bin/env perl

use strict;
use warnings;

use File::Find;

# Get the first argument passed to the script
my $argument_path = shift;
die("ERROR: an argument must be provided\n") unless $argument_path;
die("ERROR: the argument must be a folder: $argument_path\n") unless -d $argument_path;

# Iterate over every file and folder within the $argument_path
find sub {

    my $filename = $_; # relative to current working directory

    # Skip all but .eaf and .pfsx file types
    return unless $filename =~ /\.eaf$/;
    return unless $filename =~ /\.pfsx$/;

    print $filename."\n";

    # ... deal with the file or folder here

}, $argument_path;
    
respondido por el Graham Miln 26.05.2016 - 14:12
0

Intente usar Eventos del sistema en lugar de Finder. Intentaba obtener todos los archivos de un tipo de extensión particular en una carpeta y seguí recibiendo errores de script.

tell application "System Events"

continúa con el resto de tu código.

Espero que esto ayude!

    
respondido por el nimaQ 20.06.2016 - 19:23

Lea otras preguntas en las etiquetas