Jalur relatif di Automator

2

Saya ingin membuat tindakan Automator yang menyalin satu set file dari folder ke folder lain yang satu folder di atas dan kemudian dua folder di bawah dari file asli. Dengan kata lain: ../Folder1/Folder2. Tindakan Automator akan berada di folder yang sama dengan file, tetapi folder root akan digandakan dan diganti di beberapa komputer, sehingga jalur HARUS relatif.

Pemahaman saya adalah bahwa saya perlu menjalankan Applescript untuk mengambil jalan saat ini dan kemudian melakukan ... sesuatu. Saya memiliki pengalaman nol scripting. Adakah yang bisa membantu?

masukkan deskripsi gambar di sini

Ben Dansby
sumber
Saya tahu shell dapat mengintimidasi, tetapi sementara ini dapat dilakukan di Automator, sangat mudah di shell sehingga Anda mungkin ingin mulai merasa nyaman dengan itu:cp files*.txt ../Folder1/Folder2
beroe
Lupakan pertanyaan bodoh saya The Action IS an Application :-)
markhunte
Telah menambahkan dua versi lagi ke jawaban saya ..
markhunte

Jawaban:

1

Alih-alih AppleScript, Anda bisa melakukannya dengan menambahkan modul Run Shell Script dengan konten ini:

for F in "$@"; do
    cp "$F" "${F%/*/*}/Folder1/Folder2/${F##*/}"
done 

Edit nama Folder1 / Folder2 agar sesuai dengan kasus Anda yang sebenarnya.

Pilih argumen As dari Pass Input: pop-up di sebelah kanan tempat dikatakan stdin .

$@menyimpan path lengkap semua file yang dipilih. $Fadalah setiap jalur file individual karena diproses oleh forloop. Yang aneh ${F%/*/*}adalah path lengkap file minus nama file dan nama folder induknya. Yang aneh ${F##*/}adalah nama file itu sendiri.

Uji dulu untuk keamanan!

Gambar skrip

Cara lain untuk melakukannya, yang saya pikir akan lebih mudah dalam jangka panjang:

  1. Buka jendela terminal.
  2. Ketik cdspacedan seret folder yang berisi file Anda ke jendela. (Ini akan menempel di path ke folder itu. Pastikan untuk memasukkan spasi setelah cdsebelum Anda drag-and-drop.)
  3. Tipe cp *Video* ../Folder1/Folder2
  4. Selesai!
beroe
sumber
Jadi, jawaban Anda yang lain: file cp * .txt ../Folder1/Folder2 lebih sederhana dan lebih baik? Jawaban dengan for-loop ini lebih umum, karena tidak menganggap ekstensi khusus ".txt"?
Kaydell
Nah, perintah yang Anda ketikkan setiap kali Anda membutuhkannya adalah yang paling fleksibel, lebih banyak daripada for-loop. Saya hanya mencontohkan *.txtcara memilih beberapa file. Itu bisa apa saja. Jika Anda memilih rute Automator, maka Anda memiliki langkah menggunakan GUI untuk memilih file (mungkin lebih mudah atau lebih sulit tergantung pada konteksnya), tetapi jelas lebih sulit untuk mengubah Folder1/Folder2tujuan dengan mengedit skrip Automator setiap kali Anda ingin Gunakan.
beroe
Saya menatap skrip shell Anda, dan saya benar-benar tidak tahu apa yang harus dilakukan dengannya. Pegangan
Ben Dansby
Saya mengedit jawabannya. Saya telah lupa menyebutkan bahwa as argumentsopsi harus dipilih. Juga menambahkan perintah shell asli, jika Anda ingin berpetualang.
beroe
1
Saya mendapatkan semuanya bekerja dengan banyak contoh dari setiap langkah untuk menyalin set gambar yang berbeda. Terima kasih banyak atas bantuan Anda! Saya akan mendukung Anda jika saya memiliki karma :-)
Ben Dansby
0

UPDATE * memangkas kode sedikit, dan memperbaiki jalurnya

Karena Anda meminta applescript ...

on run {input, parameters}
    tell application "Finder"
        set thefolderPath to "folder1:folder2:"
        set mycontainer to (path to me)
            set movePath to folder thefolderPath of container of (path to me)'s container as alias
        duplicate input to movePath

    end tell

end run

Ini juga tidak jauh dengan tindakan copy karena duplikasi dilakukan di sini juga.


PEMBARUAN 2

Dengan versi ini. Tidak masalah di mana Aplikasi itu berada. Jalur ini dikerjakan berdasarkan lokasi file.

on run {input, parameters}
    set thefolderPath to "folder1:folder2:"
    tell application "Finder"
        set thisItem to item 1 of input as alias
         set movePath to folder thefolderPath of container of (thisItem)'s container as alias
        duplicate input to movePath

    end tell

end run

PEMBARUAN 3

Versi ini sama dengan pembaruan 2. Tetapi akan menguji folder1 dan folder2 Anda.

Jika salah satu folder tidak ada, itu akan membuatnya dan memindahkan file ke sana. Kalau saja folder2 tidak ada. Maka itu hanya akan membuat folder itu di dalam folder1. Berarti item yang ada di folder1 aman.

on run {input, parameters}
    set thefolderPath to "folder1/folder2/"
    tell application "Finder"
        set thisItem to item 1 of input as alias
        set movePath to container of (thisItem)'s container as alias
        set theTestPath to ((POSIX path of movePath) & "/" & thefolderPath)

        if (do shell script "/bin/test -e " & quoted form of theTestPath & " ; echo $?") is "1" then
            -- 1 is false
            do shell script "/bin/mkdir -p " & quoted form of theTestPath

        end if
        set theActualPath to (POSIX file theTestPath) as alias
        duplicate input to theActualPath

    end tell

end run
markhunte
sumber
Terima kasih untuk skripnya! Sayangnya, ini hanya berfungsi ketika saya menjalankannya dari Automator, sehingga file-file tersebut disimpan di dalam folder Applications (setelah saya mengatur struktur folder yang tepat di dalam Applications). Ketika saya mencoba dan menjalankannya dari Finder (bahkan ketika itu ada di dalam folder Applications), saya mendapatkan kotak dialog yang memberi tahu saya ada kesalahan Applescript.
Ben Dansby
Ini adalah video yang menunjukkan: dl.dropboxusercontent.com/u/155264288/2013-09-11%2008.46.12.mov
Ben Dansby
AH Saya sudah memperbaruinya. Saya tidak
percaya
Ngomong-ngomong bagaimana ini digunakan dan mengapa. Hanya berpikir itu adalah cara aneh untuk membuat kode aplikasi untuk menyalin beberapa file.
markhunte
Hai Mark, terima kasih banyak untuk mengerjakan ini. Jawaban Beroe di atas berhasil untuk saya, tetapi saya akan mempelajari jawaban Anda karena saya pikir itu bisa membantu dalam situasi lain. Cara saya menggunakan ini adalah untuk mengambil sejumlah besar gambar, yang masing-masing memiliki satu atau lebih "tag" dalam nama file mereka, dan triase mereka ke folder yang berbeda berdasarkan tag mereka. Semuanya perlu portabel karena pada akhirnya akan diduplikasi, diganti namanya, dan dipindahkan ke banyak komputer yang berbeda.
Ben Dansby