Membuat folder terkompresi HFS + otomatis

17

Saya ingin mengatur cara otomatis untuk pengarsipan file di OS X Lion. Maksud saya pengarsipan adalah menggunakan fitur kompresi HFS + pada folder tertentu, dan membuat setiap file yang saya pindahkan ke folder ini secara otomatis dikompresi. Saya berpikir untuk menggunakan ini untuk mengarsipkan file besar yang tidak sering saya gunakan, tetapi tanpa harus secara manual membuat arsip terkompresi dan harus mengekstraknya jika saya membutuhkannya.

Saya menemukan alat afsctool ( brew install afsctool), yang dapat, melalui command-line, menerapkan kompresi HFS + ke folder dan semua file di dalamnya. Tapi saya percaya itu tidak mengaktifkan kompresi file masa depan yang dipindahkan ke folder.

Memindahkan file secara manual dan menjalankan instruksi baris perintah berulang kali tidak nyaman. Karena itu saya rasa saya perlu menggunakan automator / AppleScript untuk menjalankan ini dalam dua langkah:

  1. Buat skrip yang memungkinkan memindahkan file apa pun ke folder tertentu. Idealnya opsi bernama Arsip dapat diakses melalui klik kanan pada file.
  2. Jalankan instruksi baris perintah afsctool -c <folder>, untuk mengaktifkan kompresi pada semua file baru saja pindah ke folder.

Saya tidak punya pengalaman menggunakan automator atau AppleScript, jadi saya ingin tahu harus mulai dari mana, terutama tentang cara menambahkan tindakan ke Finder, dan cara menjalankan alat baris perintah dari skrip.


Pembaruan

Panduan @kopischke bekerja dengan baik. Script itu sendiri, saya buat berdasarkan jawaban oleh @mark, tetapi menggunakan afsctool -c <folder>, bukan ditto. Ini skripnya: Ini harus dimasukkan~/Library/Scripts/Folder Action Scripts

on adding folder items to this_folder after receiving these_items
repeat with i from 1 to number of items in these_items
    try
        set this_item to item i of these_items
        tell application "Finder"
            set the file_name to the POSIX path of this_item
        end tell
        set cmd to "/usr/local/bin/afsctool -c " & file_name
        do shell script cmd
    on error the error_message number the error_number
        display dialog "Error: " & the error_number & ". " & the error_message buttons {"OK"} default button 1

    end try
end repeat
end adding folder items to

Karena afsctool di MobileMe tidak lagi tersedia, ada diimdeep / afsctool di GitHub, saat ini 1.6.4.

Juga afsctool di MacPorts di mana mereka mengetahui masalah MobileMe tetapi mungkin tidak mengetahui sumbernya di GitHub.

Boj
sumber
Pertanyaan yang bagus Berapa tingkat kompresi yang bisa diharapkan dari ini?
n1000

Jawaban:

6

Ada dua bagian jawaban untuk pertanyaan Anda.

  1. Cara menambahkan item menu konteks Finder ke file "Archive": ini mudah dicapai dengan membuat Layanan Automator (Otomatisasi Mac OS X memiliki tinjauan yang baik tentang apa yang dapat dilakukan oleh layanan Automator yang diperkenalkan di OS X 10.6):

    • Luncurkan Automator, pilih "Layanan" ketika diminta untuk jenis alur kerja yang ingin Anda buat.
    • Pilih "File atau Folder" di tarik-turun "Terima Layanan" (perkiraan terjemahan - Saya menggunakan sistem Jerman). Secara opsional, atur drop-in "in" ke "Finder".
    • Tambahkan tindakan "Dapatkan Item Pencari yang Dipilih".
    • Tambahkan tindakan "Pindahkan Barang Pencari" di bawah itu dan atur ke folder target Anda.
    • Simpan layanan Anda di lokasi default ( ~/Library/Services) sebagai "Arsip".

    Anda sekarang memiliki menu layanan baru dan entri menu konteks (tergantung pada jumlah layanan aktif: baik pada tingkat menu pertama, atau di submenu "Layanan") yang disebut "Arsip" yang akan memindahkan file atau folder yang dipilih ke target Anda map.

  2. Cara mengotomatiskan kompresi HFS + file yang ditambahkan ke folder target Anda: ada beberapa cara untuk mencapai itu. Anda tentu saja dapat menambahkan langkah itu ke layanan pengarsipan Anda. Kerugian dari pendekatan ini adalah tidak ada kompresi yang akan diterapkan jika file atau folder ditambahkan ke folder di luar layanan, tentu saja. Pendekatan yang lebih baik adalah membuat segala sesuatu di folder dikompres secara otomatis, tanpa bergantung pada vektor entri atau interaksi pengguna.

    Salah satu caranya adalah, seperti yang Anda temukan, menjalankan utilitas kompresi setiap kali file atau folder ditambahkan ke folder yang Anda tonton:

    • cara untuk meluncurkan utilitas shell di AppleScript adalah do shell scriptperintah - lihat dokumentasi yang ditautkan;
    • cara bawaan untuk memanfaatkan peristiwa filesystem di AppleScript adalah dengan menggunakan Tindakan Folder , yang memanggil AppleScripts tentang perubahan dalam folder yang ditonton. Kejadian apa yang bereaksi terhadap skrip didefinisikan oleh skrip itu sendiri, melalui handler yang disediakannya (misalnya, skrip dalam jawaban Mark memiliki handler untuk adding folder items- artinya skrip bereaksi terhadap file yang baru ditambahkan; lihat Panduan Bahasa Applescript untuk referensi lengkap ) . Konfigurasi Tindakan Folder ditemukan dalam menu layanan folder dalam Finder (dalam menu konteks, juga).
    • alternatif turbocharged untuk Tindakan Folder adalah Paul Kim Hazel (perangkat lunak komersial), yang menambahkan pemrosesan berbasis aturan dan sejumlah kriteria untuk penanganan acara sistem berkas yang jauh melampaui apa yang dapat Anda capai dengan Tindakan Folder sederhana - Anda mungkin ingin menyelidiki Hazel jika Anda rencanakan untuk melakukan lebih banyak atau lebih rumit hal-hal yang Anda rencanakan sekarang.

    Alternatif untuk keseluruhan pendekatan scripting adalah menggunakan LateNiteSoft's Clusters - perangkat lunak komersial lain, yang tidak melakukan apa pun kecuali secara otomatis menerapkan (dan mendaftar ulang, jika perlu) kompresi HFS + ke isi folder yang ditonton.

kopischke
sumber
Terima kasih atas jawaban anda. Saya akan mencoba opsi menjalankan AppleScript sebagai Tindakan Folder. Saya mengetahui Clusters, dan apa yang saya coba capai adalah persis seperti itu (Clusters orang miskin);)
Boj
@williamvoor: Senang jika bisa membantu. Maukah Anda menerima jawabannya? Itulah tombol tanda centang :).
kopischke
Solusi skrip tindakan folder berfungsi. Script itu sendiri saya tempelkan pada pertanyaan.
Boj
5

@williamvoor: Script gagal dengan filepath yang berisi spasi, karena set the file_name to the POSIX path of this_itemtidak lolos dengan benar. Perbaiki baris kode yang sesuai untuk ini:

set cmd to "/Users/sn/bin/bin/afsctool -c \"" & file_name & "\""

Penjelasan : Argumen nama file afcstool dikelilingi dengan tanda kutip, yang sendiri dalam kode AppleScript lolos agar diserahkan dengan benar ke lingkungan baris perintah.

Meta-topic : Karena saya kekurangan poin reputasi, saya tidak bisa berkomentar di posisi yang sesuai (= untuk posting @williamvoor), oleh karena itu saya mempostingnya sebagai jawaban sendiri, dan meminta Anda untuk mengedit perubahan kode ke dalam posting Anda, dan memberi saya acungan jempol, sehingga saya mendapatkan reputasi yang cukup, memungkinkan saya untuk langsung berkomentar di masa depan. Terima kasih!

Setelah itu selesai saya atau admin bisa menghapus posting saya.

porg
sumber
3

Utas ini memberikan applescript untuk digunakan sebagai tindakan Folder yang akan memampatkan file saat ditambahkan

on adding folder items to thisFolder after receiving theseItems
    set destinationPath to "/POSIX path/to/destination/folder"
    repeat with thisItem in theseItems
        set cmd to "ditto --hfsCompression " & quoted form of POSIX path of thisItem & " " & destinationPath
        do shell script cmd with administrator privileges
    end repeat
end adding folder items to
pengguna151019
sumber
Tidak tahu tentang --hfsCompressionopsi ditto- bagus! Tetapi jawaban Anda tidak menjawab pertanyaan OP tentang mengintegrasikan skrip bergerak ke Finder, ia memindahkan file yang dijatuhkan ke folder arsip ke folder lain (yang saya pikir akan menjadi satu lagi pengalihan daripada OP berencana untuk melakukan) dan itu akan meminta otentikasi setiap kali (menjengkelkan dalam konteks otomatisasi).
kopischke
0

Cluster

... memanfaatkan teknologi kompresi file di Mountain Lion, Lion dan Snow Leopard ...

Kompresi Folder MoreSpace

... Kompresi HFS + memiliki efek terbaik pada format file yang tidak terkompresi seperti teks dan dokumen data, database, dan kotak surat. Ukuran kotak surat biasa dapat dikurangi hingga 50%. ...

Pilihan

Dari keduanya, saya menemukan Cluster lebih matang dan lebih mudah digunakan - mungkin lebih cocok untuk pertanyaan ini.


Lanjutkan dengan hati hati

Dalam kasus tepi, silent dataloss dapat terjadi dengan penggunaan pihak ketiga AppleFSCompression. Dari apa yang saya tahu ini adalah bug di OS, dan mungkin terjadi hanya di mana ada kekurangan ruang kosong yang luar biasa. Saya akan memberi makan bug ke Apple.

Graham Perrin
sumber
1
Kedua hal ini tampaknya telah dihentikan sekarang.
EpicVoyage