Filmiki Ogólne Porady

AUtomaczek #3 – Rekursywna zmiana nazw wielu plików

Dzisiaj kolejny odcinek zabawy z programem Keyboard Maestro. Opisany efekt da się zapewne także osiągnąć przy użyciu Apple Script lub akcji Automatora, poniższy wpis może więc okaże się inspiracją dla naszych czytelników używających tych narzędzi.

Tworząc artykuły na bloga umieszcza się w nich wiele ilustracji. Najczęściej są to po prostu zrzuty ekranowe, które u mnie lądują automatycznie na Biurku w katalogu Screenshots. Każdy z nich posiada troche irytującą nazwę ZrzutEkranu po czym następuje godzina utworzenia. Chciałem trochę to pozmieniać i ponazywać te zrzuty nazwą właśnie opisywanej aplikacj a następnie numer porządkowy. Najczęściej kopiuje te zdjęcia do folderu Dokumenty gdzie znajduje się także plik ze szkicem posta – ręcznie bo nie wpadłem jeszcze jak to zrobić sensownie przy użyciu Hazel. Co chcę osiągnąć? Zaznaczając grupę plików w Finderze jednym skrótem klawiszowym wywoła się okienko w którym wpiszę nazwę aplikacji a następnia reszta przenumeruje się sama.

Wbrew pozorom cała operacja jest nieco złożona jak widać na rysunku poniżej.

KMRecursiverename_1

Kolejność działań jest następująca:

1. Skrypt prosi użytkownika o podanie nazwy aplikacji
2. Dla każdego pliku w zaznaczeniu skrypt pobiera jego całą nazwę
3. Zapisuje jego nazwę do zmiennej
4. Do osobnej zmiennej zapisuje tylko samą część ścieżki dostępu bez nazwy
5. Wartość zmiennej Licznik na początku ustawia na 1
6. Do zmiennej nowaNazwa kopiuje zawartość ścieżki dostępu z nową nazwą pliku, którą jest nazwa podana przez użytkownika z dodanym numerkiem odczytanym ze zmiennej licznik i na końcu doczepionym rozszerzeniem
7. Zwiększa wartość licznika o 1
8. Po wykonaniu całości generuje systemowe powiadomienie

Największy problem w przypadku całkowitej zmiany nazwy (a nie tylko dopisywania czegoś do niej na początku lub końcu) to przechwycenie rozszerzenia. W systemach UNIXowych nie istnieje de facto konwencja z czasów DOSa (8 + 3 znaków) lub Windowsa 95 (255 znaków nazwy kropka i rozszerzenie) – całość to nazwa. Problematyczne jest to wtedy gdy w nazwie znajduje się wiele kropek, należy przechwycić tylko to co znajduje się po ostatniej z nich. Po przeszukaniu zasobów Internetu okazało się że przydaje się stare dobre awk:

 awk -F . '{if (NF>1) {print $NF}}'

Jak działa makro w praktyce pokazuje niniejszy filmik.

Dla eksperymentatorów gotowe makro można pobrać TUTAJ