استخدم Automator و Applescript لنقل الملفات إلى المجلدات بناءً على اسم الملف

StackOverflow https://stackoverflow.com/questions/3875650

  •  28-09-2019
  •  | 
  •  

سؤال

لدي مجلد يحتوي على الملفات التالية:

Elephant.19864.archive.other.pdf
Elephant.17334.other.something.pdf
Turnip.19864.something.knight.pdf
Camera.22378.nothing.elf.pdf

أريد نقل هذه الملفات إلى الهيكل التالي

Archive
    Elephant
        Elephant.19864.pdf
        Elephant.17334.pdf
    Turnip
        Turnip.19864.pdf
    Camera.HighRes
        Camera.HighRes.22378.pdf

تتكون الملفات التي تم إنشاؤها من كلمة أو كلمات متعددة ، تليها سلسلة من الرقم ، تليها كلمات أخرى ثم الامتداد. أرغب في نقلها إلى مجلد يسمى الكلمة أو الكلمات قبل الأرقام ، وإزالة جميع الكلمات بين الأرقام والتمديد (.pdf في هذه الحالة).

إذا لم يكن المجلد موجودًا ، فيجب علي إنشائه.

اعتقدت أن هذا سيكون بسيطًا جدًا باستخدام Automator أو Applescript ، لكن لا يبدو أنني قادر على الحصول على رأسي حوله.

هل هذا سهل باستخدام Automator/Applescript إذا كان الأمر كذلك ، فماذا يجب أن أنظر إليه

هل كانت مفيدة؟

المحلول

إنه أمر سهل ، إنه ليس واضحًا في البداية. بعض الأشياء لتبدأ.

لتحليل أسماء الملفات للحصول على أسماء المجلد ، تحتاج إلى فصل الاسم إلى قائمة ...

set AppleScript's text item delimiters to {"."}
set fileNameComponents to (every text item in fileName) as list
set AppleScript's text item delimiters to oldDelims
--> returns: {"Elephant", "19864", "archive", "other", "pdf"}

تحتوي القائمة على فهرس 1 ، لذلك البند 1 هو "Elephant" والبند 5 هو "PDF". لتهدئة اسم الملف معًا ، كل ما تحتاجه هو هذا

set theFileName to (item 1 of fileNameComponents & item 2 of fileNameComponents & item 5 of fileNameComponents) as string

لإنشاء مجلد ، فقط استخدم ما يلي ...

tell application "Finder"
    set theNewFolder to make new folder at (theTargetFolder as alias) with properties {name:newFolderName, owner privileges:read write, group privileges:read write, everyones privileges:read write}
end tell

لنقل ملف ، كل ما تحتاجه هو هذا ...

tell application "Finder"
    set fileMoved to move theTargetFile to theTargetFolder
end tell

لإعادة تسمية ملف ، استخدم شيئًا مثل ما يلي ...

set theFileToRename to theTargetFilePath as alias -- alias is important here
set name of theFileToRename to theFileName

أقترح أولاً إنشاء قائمة بجميع الملفات المستهدفة ، ثم لكل ملف في القائمة ، قم بإنشاء المجلدات بناءً على اسمها ، ونقل الملف ، وأخيراً إعادة تسميته بمجرد أن يكون في موقعه النهائي.

أضف الملح حسب الذوق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top