Applescript з отриманням кожного циклу файлів не вдається


0

Я хочу запустити сценарій для всіх файлів з двома конкретними розширеннями на диску з ієрархією декількох вкладених папок. Мій сценарій прекрасно працює, коли я вибираю папку вниз по лінії з меншою кількістю папок, але я хотів би запустити її на весь архів із більш ніж тисячею папок. AppleScript має назавжди getвсі файли, а потім виходить, не повертаючи нічого і не виконуючи операції після отримання файлів. Немає повідомлення про час очікування, немає повідомлення про помилку. І Finder стає невідповідальним (і залишається застряглим після закінчення сценарію).

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

1
Що ви намагаєтеся зробити з знайденими файлами? Баш скрипт може бути більш ефективним способом піти.
користувач3439894

Я передаю їх до сценарію perl через do shell script "perl " & quoted form of perlScript & " " & quoted form of CurrentFile- я думаю, що є кращий спосіб зробити це, але мої навички сценарію в значній мірі обмежені яблучним сценарієм.
січня

Відповіді:


1

Файл Perl :: Знайти ідеально підходить для повторення всіх файлів у папці. Цей підхід стосується одного файлу за один раз, швидкий і пам'ять ефективна.

Використовуйте AppleScript, щоб представити вибір папки, а потім передати вибраний шлях папки до вашого сценарію 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

Сценарій perl може потім вирішувати питання про переміщення файлів. Нижче наведено зразок сценарію perl для ітерації файлів та фільтрації до лише eafта 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;

0

Спробуйте використовувати системні події замість Finder. Я намагався отримати кожен файл певного типу розширення у папці і постійно отримував помилки сценарію.

tell application "System Events"

продовжуйте з іншим кодом.

Сподіваюся, це допомагає!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.