AppleScript для чтения текстового файла, содержащего имена файлов, поиска каждого имени файла и, если файл найден, скопируйте его в папку

Извините за вопрос, даже не вставив мою попытку кодирования, но я никогда раньше не использовал AppleScript и понятия не имею, как бы это сделать. Я нашел в Интернете фрагменты кода, которые выполняют небольшие части каждого шага, но некоторые ключевые части я не могу понять, как это сделать. Если я смогу разобраться в этом, это сэкономит много времени. В основном моя проблема заключается в том, что клиент отправил более тысячи фотографий, все в нескольких уровнях вложенных папок, вместе с документом Excel, содержащим около 300 имен файлов, которые мне нужно вытащить и использовать. Я могу скопировать имена файлов из документа Excel в простой текстовый файл, либо многострочный, либо разделенный запятыми.

Итак, вот что мне нужно сделать:

  • Открыть диалоговое окно выбора папки для выбора целевой папки
  • Открыть диалоговое окно выбора файлов для выбора текстового файла
  • Прокрутите каждую строку (или значение, разделенное запятыми) текстового файла
  • Возьмите эту строку и найдите имя файла, содержащего строку
  • Скопируйте первый результат в папку (скажем, Рабочий стол: найденные фотографии)
  • Если не удалось найти файл, соответствующий строке, добавьте строку поиска в текстовый файл (чтобы я мог отправить его клиенту по электронной почте и попросить его отправить его мне)

Если вы не можете закодировать весь этот процесс, если бы вы могли помочь мне перебрать текстовый файл, найти имя файла и скопировать первый результат в другую папку, а также добавить имя файла в текстовый файл, если файл не был ' не нашел, то я, наверное, смогу все это собрать воедино. Спасибо за любую помощь.


person Gavin    schedule 01.04.2013    source источник
comment
Спасибо за исправление моего форматирования aleroot :)   -  person Gavin    schedule 01.04.2013


Ответы (2)


Вы можете попробовать что-нибудь вроде:

set newFolder to POSIX path of (path to desktop as text) & "Found Photos"
do shell script "mkdir -p " & quoted form of newFolder
set filePaths to paragraphs of (read (choose file with prompt "Select file list") as «class utf8»)
set fileFolder to POSIX path of (choose folder with prompt "Select folder containing files")

set foundFiles to {}
repeat with fileName in filePaths
    set fileName to (contents of fileName)
    set xxx to do shell script "find " & quoted form of fileFolder & " -name " & quoted form of fileName
    if xxx ≠ "" then
        tell application "System Events" to move file xxx to newFolder
        set end of foundFiles to fileName & return
    end if
end repeat

set foundFiles to (foundFiles as text)
do shell script "echo " & quoted form of foundFiles & " > " & quoted form of POSIX path of ((path to desktop as text) & "FoundFiles.txt")
person adayzdone    schedule 01.04.2013
comment
Прекрасно работает! Спасибо. Это сэкономит мне массу времени! - person Gavin; 01.04.2013
comment
Я пытаюсь отредактировать это так, чтобы он копировал файл, а не перемещал его, и мне не очень везет. Сначала я попытался изменить перемещение на дубликат, но я получаю сообщение об ошибке. Системные события получили ошибку: не удается преобразовать / Users / Gavin / Desktop / Found Photos в ссылку на местоположение. Затем я попытался изменить всю эту строку, чтобы указать приложению Finder дублировать файл xxx в папку newFolder. Это дало мне ошибку Finder получил ошибку: не удается установить папку / Users / Gavin / Desktop / Found Photos в файл / Users / Gavin / Desktop / AppleScript Test // photo 2.JPG. Вы знаете, что случилось? - person Gavin; 01.04.2013
comment
указать приложению Finder дублировать (файл POSIX xxx) как псевдоним (файл POSIX newFolder) как псевдоним - person adayzdone; 01.04.2013

Возможно, было проще использовать сценарии оболочки:

IFS=$'\n'
mkdir -p ~/Desktop/target/
for l in $(cat ~/Desktop/files.txt); do
    found=$(find ~/Documents/source -type f -name "*$l*")
    [[ -n $found ]] && cp $found ~/Desktop/target/ || echo "$l"
done
person Lri    schedule 01.04.2013