Applescript con errore su ogni loop di file

0

Voglio eseguire uno script su tutti i file con due estensioni specifiche su un disco con una gerarchia di più cartelle nidificate. Il mio script funziona bene quando scelgo una cartella più in basso con meno sottocartelle, ma mi piacerebbe eseguirla su un intero archivio con oltre mille cartelle. L'AppleScript impiega per sempre a get tutti i file e quindi esce senza restituire nulla e senza eseguire le operazioni dopo aver ottenuto i file. Nessun messaggio di timeout, nessun messaggio di errore. E il Finder non risponde (e rimane bloccato dopo l'uscita dello script).

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
    
posta jan 26.05.2016 - 10:14
fonte

2 risposte

1

Il File :: Find di Perl è ideale per iterare su tutti i file in una cartella. Questo approccio si occupa di un file alla volta, è veloce ed efficiente in termini di memoria.

Usa AppleScript per presentare la scelta della cartella e poi passa il percorso della cartella selezionata allo script 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

Lo script perl può quindi occuparsi di attraversare i file. Di seguito è riportato un esempio di script perl per l'iterazione su file e il filtraggio solo su eaf e pfsx suffissi:

#!/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;
    
risposta data 26.05.2016 - 14:12
fonte
0

Prova a utilizzare Eventi di sistema anziché Finder. Stavo cercando di ottenere ogni file di un particolare tipo di estensione in una cartella e continuavo a ricevere errori di script.

tell application "System Events"

continua con il resto del codice.

Spero che questo aiuti!

    
risposta data 20.06.2016 - 19:23
fonte

Leggi altre domande sui tag