Automator: Dosyaları, seçilen herhangi bir klasördeki * dosya uzantısına göre * yeni alt klasörlere taşıma *


2

Uzun bir süredir araştırma yapıyorum ancak bu görev için uygun talimatlar bulamıyorum. Bu konuda yepyeni, bu yüzden temel bir şey eksik varsa özür dilerim.

Birçok fotoğrafçı gibi, tek bir klasördeki RAW (CR2), JPG ve MOV dosyalarını içeren bir kartla çekimden dönüyorum. Bu klasörü sabit diskime kopyaladıktan sonra, tek bir hizmet oluşturmak istediğim aşağıdaki işlemleri yapmam gerekiyor, böylece aynı işlemi seçtiğim herhangi bir klasör için de çalıştırabilirim.

İşte otomatikleştirmek istediğim şey:

  1. Seçilen klasördeki Raw, JPG ve Video için ayrı klasörler oluşturun.
  2. Her tipteki dosyaları tanımlayın ve ilk adımda oluşturulan klasörlere taşıyın.

Bunun basit olacağını düşünmüştüm, ancak sorun belirli bir klasör yoluna bağlı değil, genel bir hizmet olma ihtiyacına dayanıyor gibi görünüyor. Diğer klasörler için tekrarlanabilir olmasına ihtiyacım var, ancak bu çok yönlülük yönünü çözemiyorum.

İhtiyacım olan alt klasörleri yaratan bir Apple Script (aşağıya bakınız) buldum ve uyarladım. Bu kısım kendi başına bir servis olarak iyi çalışıyor. Ancak asıl dosya taşıma işlemini gerçekleştirecek ikinci adımı gerçekleştiremiyorum.

Belirli bir türdeki dosyaları belirli bir klasöre nasıl taşıyacağımı biliyorum ancak ihtiyacım olan şey bu değil. Belirli bir klasördeki tüm JPG'lerin seçilen klasördeki JPG adlı yeni bir alt klasöre taşınmasını ve diğer dosya türlerinde de aynı şekilde olmasını istiyorum. Bu dosya türlerini filtrelemeyi anlıyorum, ancak şu ana kadar yolu belirtmek zorunda kalmadan bir klasöre nasıl taşıyacağımı bulamıyorum, henüz var olmayan klasörlere nasıl işaret edeceğimi bilmiyorum. Yapabilsem bile, bu yollar üzerinde çalışmam gereken her klasör için farklı olacaktır.

Herhangi biri tavsiye verebilir veya beni ilgili bir tartışmaya yönlendirebilir mi?

Çok çok teşekkürler.

///

İşte alt klasör oluşturma hizmetimin Apple Script'i: alt klasör komut dosyası

Komut dosyası metni:

on run {input, parameters}
    set output to {}
    tell application "Finder"
        set {source_folder, source_name} to {it, name} of first item of input
        repeat with prefix in {"JPG - ", "RAW - ", "Edits - ", "Video - "}
            make new folder at source_folder with properties {name:contents of prefix & source_name}
            set end of output to result as alias
        end repeat

Not: Otomasyonun dosya taşıma kısmı benim "Düzenlemeler -" klasörümü içermeyecek. Bu sadece gelecekteki dosyalar için bir konteyner.


Hizmeti çalıştırmak için sıralanacak asıl klasörü seçecek misiniz, yoksa klasörü açıp servisi Finder menüsünden çalıştırmayı mı seçeceksiniz ?
CJK

Yanıtlar:


2

Seçilen bir klasörde birkaç klasör oluşturmak ve seçili klasördeki varolan dosyaları, dosya uzantısına bağlı olarak, seçilen klasör içinde oluşturulan klasörlere taşımak istiyorsam, bashAppleScript kullanmam .

Aşağıdaki Servis, Finder'da seçilen klasörleri alır ve aşağıdakileri yapar:

  • Seçili klasörde aşağıdaki klasörleri oluşturur; burada "$ parent_folder_name", hizmetin çalıştığı seçili klasörün adıdır:
    • "Düzenlemeler - $ parent_folder_name"
    • "JPG - $ parent_folder_name"
    • "RAW - $ parent_folder_name"
    • "Video - $ parent_folder_name"
  • Varolan dosyaları, dosya uzantısındaki yeni oluşturulan klasörler tabanına taşır.

for f in "$@"; do
    cd "$f"
    d="$(basename "$f")"
    mkdir -p "Edits - $d" "JPG - $d" "Raw - $d" "Video - $d"
    mv *.JPG "./JPG - $d"
    mv *.CR2 "./RAW - $d"
    mv *.MOV "./Video - $d"
done

görüntü tanımını buraya girin


@CJK'nin güzel el yazmasını kullanmamaya üzülüyorum ama benim gibi noobun daha sonra ince ayar yapması için bashınızın daha kolay olacağına karar verdim. Mükemmel çalışıyor, çok teşekkür ederim! Bu kısayolu yapmaktan memnun olacak çok insan tanıyorum.
David,

3

Örneğin bağlamsal sağ tıklama hizmetleri menüsü üzerinden Automator servis iş akışınıza aktarmak için gerçek klasörleri seçeceğiniz varsayımı üzerinde çalıştım .

Buna bakıldığında, hizmet iş akışınızın nasıl göründüğü:

MacOS'ta Automator İş Akışı

İşte Run AppleScripteyleme geçen senaryo :

on run input
    set [input] to the input

    repeat with directory in the input
        organiseFilesOfFolder_(POSIX path of the directory)
    end repeat

end run

to organiseFilesOfFolder:f
    local f

    script SourceFolder
        use sys : application "System Events"

        property location : a reference to folder f of sys
        property name : (a reference to name of my location)

        script JPGs
            property folder : missing value
            property name extension : "jpg"
            property list : {}
            property id : "JPG"
        end script

        script RAWfiles
            property folder : missing value
            property name extension : "cr2"
            property list : {}
            property id : "RAW"
        end script

        script Videos
            property folder : missing value
            property name extension : "mov"
            property list : {}
            property id : "Video"
        end script

        script Edits
            property folder : missing value
            property id : "Edits"
        end script


        to make new "folder" given type:fileType
            [fileType's id, " - ", my name's contents]

            make new folder at my location ¬
                with properties {name
                contents of result as text}

            set the folder of the fileType to the result
        end make

        on listOf:fileItems
            set the list of fileItems to (every file ¬
                of my location where its name extension ¬
                is the name extension of the fileItems)
        end listOf:
    end script

    tell the SourceFolder
        repeat with fileType in its [JPGs, RAWfiles, Videos, Edits]
            make new "folder" given type class:fileType
            if the contents of the fileType = its Edits then ¬
                exit repeat

            if (its listOf:fileType) is not {} then ¬
                tell application "System Events" to move ¬
                    list of fileType to the ¬
                    folder of the fileType
        end repeat
    end tell
end organiseFilesOfFolder:

Açıkçası, OP'nin gereklilikleri yalnızca AppleScript ise, o zaman sorun değil, IMO bashbir Run Shell Script - Run AppleScript kullanmada sekiz satır kodda yapılabilecek kadar basit bir iş için çok azdır. Yine de güzel senaryo!
user3439894

@ user3439894, OP'nin AppleScript'te kısmi bir girişim sağladığını düşünerek, CJK'nin burada olduğunu düşünüyorum. Her iki yaklaşımın da işe yaradığını düşünüyorum, bunun daha iyi bir cevap olduğunu düşünüyorum. +1 burada
ᴅ2ᴅ2

@ User3439894 ile aynı fikirdeyim, bu tamamen eksiktir ve cevabına göre ne gibi ekstralar yaptığını netleştirmeyin.
Ruskes

1
@ ᴅ2ᴅ2 bizde Please avoid extended discussions in comments. öyle bırakalım. Sonuçta OP karar verecek.
Ruskes

1
@CJK Bu çok güzel. Çok fazla çaba gösterdiğiniz için çok teşekkür ederim. Bir cevap seçerek gerçekten çok üzüldüm, ancak, üzgünüm, bash betiği yoluna gitmeyi bıraktım. Hiç de senin suçun değil. Bebeğimin kodlayan beyninin, daha basit bir senaryoyu anlaması daha kolay, bu, gelecekteki süreci düzeltmem gerekirse, benim için işleri daha az kafa karıştırıcı hale getirecek. El yazınız olduğu gibi, bir şeyi kendi başıma ayarlamayı denersem, mahvetmek konusunda endişelenirim. Hızlı ve tam cevap için çok teşekkür ederim. Şu an bu topluluk için çok minnettarım.
David,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.