0 votos

El Applescript con el bucle get every file falla

Quiero ejecutar un script en todos los archivos con dos extensiones específicas en un disco con una jerarquía de múltiples carpetas anidadas. Mi script funciona bien cuando elijo una carpeta más abajo con menos subcarpetas, pero me gustaría ejecutarlo en un archivo entero con más de mil carpetas. El 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, ni de error. Y el Finder deja de responder (y se queda atascado después de que el script salga).

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

1voto

Steve Evans Puntos 155

Perl's Archivo::Buscar es ideal para iterar sobre todos los archivos de una carpeta. Este enfoque se ocupa de un archivo a la vez, es rápido y eficiente en cuanto a la memoria.

Utilice AppleScript para presentar la elección de la carpeta y luego pase la ruta de la carpeta seleccionada a su perl script:

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

El perl script puede entonces ocuparse de recorrer los archivos. A continuación se muestra un ejemplo de perl script para iterar sobre los archivos y filtrar sólo eaf y pfsx sufijos:

#!/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;

0voto

nimaQ Puntos 1

Intenta usar Eventos del Sistema en lugar de Finder. Estaba tratando de obtener todos los archivos de un tipo de extensión particular en una carpeta, y seguía recibiendo errores script.

tell application "System Events"

continúe con el resto de su código.

Espero que esto ayude.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X