Tworzenie automatycznego skompresowanego folderu HFS +

17

Chciałbym skonfigurować automatyczny sposób archiwizacji plików w OS X Lion. Przez archiwizację mam na myśli użycie funkcji kompresji HFS + w określonym folderze i automatyczne kompresowanie każdego pliku, który przenoszę do tego folderu. Zastanawiam się nad tym, aby zarchiwizować duże pliki, których nie używam często, ale bez konieczności ręcznego tworzenia skompresowanych archiwów i wyodrębniania ich na wypadek, gdyby były potrzebne.

Natknąłem się na narzędzie afsctool ( brew install afsctool), które może za pomocą wiersza poleceń zastosować kompresję HFS + do folderu i wszystkich plików w nim zawartych. Ale uważam, że nie aktywuje kompresji przyszłych plików przeniesionych do folderu.

Ręczne przenoszenie plików i wielokrotne uruchamianie instrukcji wiersza poleceń jest niewygodne. Dlatego zgaduję, że musiałbym użyć automatora / AppleScript, aby wykonać to w dwóch krokach:

  1. Utwórz skrypt, który pozwala przenieść dowolny plik do określonego folderu. Idealnie opcja o nazwie Archiwum dostępna po kliknięciu pliku prawym przyciskiem myszy.
  2. Uruchom instrukcję wiersza polecenia afsctool -c <folder>, aby włączyć kompresję wszystkich nowych plików właśnie przeniesionych do folderu.

Nie mam doświadczenia w korzystaniu z automatyzatora lub AppleScript, więc chciałbym wiedzieć, od czego zacząć, szczególnie w zakresie dodawania akcji do Findera i uruchamiania narzędzia wiersza poleceń ze skryptu.


Aktualizacje

Przewodnik @kopischke działa dobrze. Sam skrypt wykonałem na podstawie odpowiedzi @mark, ale używając afsctool -c <folder>zamiast ditto. Oto skrypt: Należy go wprowadzić~/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

Ponieważ afsctool w MobileMe nie jest już dostępny, diimdeep / afsctool w GitHub, obecnie 1.6.4.

Również afsctool w MacPorts, gdzie są świadomi problemu MobileMe, ale być może nie wiedzą o źródle w GitHub.

Boj
źródło
Fajne pytanie. Jakich współczynników kompresji można się po tym spodziewać?
n1000

Odpowiedzi:

6

Odpowiedź na twoje pytanie składa się z dwóch części.

  1. Jak dodać pozycję menu kontekstowego Findera do plików „Archiwum”: można to łatwo osiągnąć, tworząc usługę Automator (system Mac OS X Automation ma dobry przegląd tego, co mogą zrobić usługi Automatora wprowadzone w OS X 10.6):

    • Uruchom Automator, wybierz „Serwis” po wyświetleniu monitu o rodzaj przepływu pracy, który chcesz utworzyć.
    • Wybierz „Pliki lub foldery” z rozwijanego menu „Usługa odbiera” (przybliżone tłumaczenia - jestem w systemie niemieckim). Opcjonalnie ustaw opcję „in” na „Finder”.
    • Dodaj akcję „Uzyskaj wybrane elementy Findera”.
    • Dodaj poniżej działania „Przenieś elementy Findera” i ustaw je w folderze docelowym.
    • Zapisz swoją usługę w domyślnej lokalizacji ( ~/Library/Services) jako „Archiwum”.

    masz teraz nowe menu usługi i pozycję menu kontekstowego (w zależności od liczby aktywnych usług: na pierwszym poziomie menu lub w podmenu „Usługi”) o nazwie „Archiwum”, która przeniesie wybrany plik lub folder do miejsca docelowego teczka.

  2. Jak zautomatyzować kompresję HFS + plików dodanych do folderu docelowego: Istnieje kilka sposobów na osiągnięcie tego. Oczywiście możesz po prostu dodać ten krok do usługi archiwizacji. Wadą tego podejścia jest to, że nie zostanie zastosowana kompresja, jeśli pliki lub foldery zostaną dodane do folderu poza usługą, oczywiście. Lepszym rozwiązaniem byłoby automatyczne kompresowanie wszystkiego w folderze, bez polegania na wektorze wejściowym lub interakcji użytkownika.

    Jak odkryłeś, jednym ze sposobów jest uruchomienie narzędzia kompresji za każdym razem, gdy plik lub folder jest dodawany do obserwowanego folderu:

    • sposobem uruchomienia narzędzia powłoki w AppleScript jest do shell scriptpolecenie - zobacz dołączoną dokumentację;
    • wbudowanym sposobem na wykorzystanie zdarzeń systemu plików w AppleScript jest użycie akcji folderów , które wywołują AppleScripts w przypadku zmian w obserwowanym folderze. Jakie zdarzenia, na które reaguje skrypt, są definiowane przez sam skrypt, za pośrednictwem dostarczonych przez niego procedur obsługi (na przykład skrypt w odpowiedzi Marka ma procedurę obsługi adding folder items- co oznacza, że ​​reaguje na nowo dodane pliki; pełny przewodnik znajduje się w przewodniku języka Applescript ) . Konfiguracja akcji folderów znajduje się w menu usług folderów w Finderze (także w menu kontekstowym).
    • turbodoładowaną alternatywą dla akcji folderów jest Hazel Paula Kima (oprogramowanie komercyjne), który dodaje przetwarzanie oparte na regułach i mnogość kryteriów obsługi zdarzeń systemu plików, które wykraczają daleko poza to, co można osiągnąć za pomocą prostych akcji folderów - możesz zbadać Hazel, jeśli planuj robić bardziej lub bardziej złożone rzeczy zgodnie z tym, co planujesz teraz.

    Alternatywą dla całego podejścia skryptowego jest użycie klastrów LateNiteSoft - innego komercyjnego oprogramowania, które nie robi nic poza automatycznym stosowaniem (i ponownym stosowaniem, w razie potrzeby) kompresji HFS + do zawartości obserwowanych folderów.

kopischke
źródło
Dziękuję za odpowiedź. Wypróbuję opcję uruchomienia AppleScript jako akcji folderu. Jestem świadomy Gromad, a to, co staram się osiągnąć, to właśnie Gromady biedaka;)
Boj
@williamvoor: Cieszę się, że mogę pomóc. Czy mógłbyś zaakceptować odpowiedź? To przycisk znacznika wyboru :).
kopischke
Rozwiązanie skryptu akcji folderu działa. Sam skrypt wkleiłem w pytanie.
Boj
5

@williamvoor: Skrypt nie działa z ścieżkami plików, które zawierają spacje, ponieważ set the file_name to the POSIX path of this_itemnie ucieka poprawnie. Popraw odpowiedni wiersz kodu do tego:

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

Objaśnienie : Argument nazwa_pliku afcstool jest otoczony znakami cudzysłowu, które same w kodzie AppleScript są usuwane, aby można je było poprawnie przekazać do środowiska wiersza poleceń.

Meta-temat : Ponieważ brakuje mi punktów reputacji, nie mogłem komentować odpowiedniego stanowiska (= do własnego posta @williamvoor), dlatego zamieszczam go jako własną odpowiedź i proszę o zmianę zmiany kodu w swoim poście, i kciuki do góry, aby zyskać wystarczającą reputację, co pozwoli mi na bezpośrednie komentowanie w przyszłości. Dzięki!

Po tym ja lub administrator mogliby usunąć mój post.

porg
źródło
3

Wątek ten udostępnia skrypt jabłkowy do użycia jako akcji Folder, która kompresuje pliki podczas ich dodawania

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
użytkownik151019
źródło
Nie wiedziałem o --hfsCompressionopcji w ditto- dobra! Ale twoja odpowiedź nie odnosi się do pytania OP dotyczącego integracji ruchomego skryptu w Finderze, przenosi pliki upuszczone w folderze archiwum do innego folderu (co moim zdaniem byłoby przekierowaniem większym niż planowane przez OP) i poprosi o uwierzytelnienie za każdym razem (denerwujące w kontekście automatyzacji).
kopischke
0

Klastry

… Wykorzystuje technologię kompresji plików w Mountain Lion, Lion i Snow Leopard…

Kompresja folderów MoreSpace

… Kompresja HFS + ma najlepszy wpływ na nieskompresowane formaty plików, takie jak dokumenty tekstowe i dane, bazy danych i skrzynki pocztowe. Typowy rozmiar skrzynki pocztowej można zmniejszyć do 50%. …

Pierwszeństwo

Z tych dwóch uważam, że Klastry są bardziej dojrzałe i łatwiejsze w użyciu - prawdopodobnie lepiej pasują do tego pytania.


Postępuj ostrożnie

W przypadku krawędzi może wystąpić cicha utrata danych w przypadku korzystania z AppleFSCompression. Z tego, co mogę powiedzieć, jest to błąd w systemie operacyjnym i może wystąpić tylko w przypadku nadzwyczajnego braku wolnego miejsca. Przekażę błąd do Apple.

Graham Perrin
źródło
1
Wydaje się, że oba zostały wycofane.
EpicVoyage