Alfred i kopiowanie nazw plików lub folderów

30/03/2017, 09:11 · · · 8

Niemal cztery lata temu podzieliłem się z Wami workflow, którego zadaniem było kopiowanie nazw zaznaczonego pliku lub folderu. Teraz wracam do tego tematu z ulepszoną wersją.

Największą bolączką poprzedniej wersji mojego workflow był brak obsługi wielu plików jednocześnie. Po wielu bojach w końcu udało mi się osiągnąć ten cel w sposób mnie zadowalający. Akcja przepisana jest praktycznie od zera i teraz nie opiera się na skrypcie Basha, ale na Pythonie. Treść skryptu możecie znaleźć poniżej:

from os.path import basename
import re, sys

query = "{query}"

query = re.sub('\t', '\n', query)

query = query.splitlines()

num = len(query)

for i in range(0,num):
    query[i] = basename(query[i])

wynik = "\n".join(query)

sys.stdout.write(wynik)

Pokrótce postaram się opisać poszczególne fragmenty:

  • from… …import… – tu oczywiście importujemy potrzebne biblioteki;
  • query = re.sub('\t', '\n', query) – ten fragment jest odpowiedzialny za podmianę tabulatorów rozdzielających kolejne ścieżki plików na nowe linie, przez co tworzymy ciąg składający się z wielu linii tekstu;
  • query = query.splitlines() – tym poleceniem konwertujemy wieloliniową zmienną na listę;
  • num = len(query) – dzięki temu fragmentowi ustalamy, ile elementów znajduje się na liście;
  • for … – rozpoczynamy pętlę która będzie przetwarzała każdy z elementów listy;
  • query[i] = basename(query[i]) – dla każdego elementu listy polecenie basename „wyciąga” ostatni kawałek ścieżki, czyli nazwę pliku lub katalogu i nadpisuje ją na poprzednią wartość elementu;
  • wynik = "\n".join(query) – przedostatnim krokiem jest ponowne przekonwertowanie listy elementów na wieloliniowy ciąg tekstowy.
  • sys.stdout.write(wynik) – to polecenie zwraca nam ciąg nazw, z których każda jest w osobnej linii. Jego działanie jest podobne do bardziej znanego print, ale w odróżnieniu od tego drugiego nie wstawia na końcu dodatkowej, nowej linii.

Wynik powyższego skryptu jest przekazywany do kolejnego elementu – Copy to Clipboard, dzięki czemu możemy wkleić skopiowane nazwy w wybrane przez nas miejsce.

Workflow Copy Name możecie pobrać stąd.


Więcej workflows dla Alfreda znajdziecie tutaj.



8

Maciej Skrzypczak

Użytkownik sprzętu z nadgryzionym jabłkiem, grafik komputerowy, Redaktor iMagazine.pl.