Użyj Skrótów na Macu, aby przekazać tekst do skryptu powłoki, który wybierze ostatnio zmodyfikowany plik tekstowy w jednym lokalnym folderze i dopisze do niego Twój wpis. W tym przewodniku wykorzystano tymczasowe pliki przykładowe; działanie zostaje przerwane, jeśli folder jest pusty lub najnowsze znaczniki czasu są identyczne.
Zadanie jest konkretne: dodać krótki wpis do istniejącego pliku tekstowego bez konieczności każdorazowego ręcznego wybierania tego pliku. Apple dokumentuje obsługę skryptów powłoki w Skrótach na Macu. Poniższy sposób łączy tę obsługiwaną funkcję z udokumentowanym wybieraniem plików i dopisywaniem tekstu w zsh. Poznaj Skróty dla macOS
Ustal, co oznacza „najnowszy plik”
W tym artykule „najnowszy” oznacza ostatnio zmodyfikowany. Skrypt uwzględnia tylko widoczne, zwykłe pliki, których nazwy kończą się małymi literami .txt i które znajdują się bezpośrednio w wyznaczonym folderze. Pomija podfoldery i dowiązania symboliczne. Te reguły wyboru wynikają ze wzorców nazw plików i kwalifikatorów zsh. Rozwijanie
Ta definicja ma wpływ na kolejne uruchomienia. Po dopisaniu tekstu do pliku zmienia się jego czas modyfikacji, więc zwykle pozostanie on najnowszym kwalifikującym się plikiem. Jeśli chcesz wybierać ostatnio utworzony dokument, czas modyfikacji jest inną regułą; ten sposób nie wybiera plików według daty utworzenia.
Zanim utworzysz skrót, wybierz regułę odpowiednią do swojego zadania:
| Zamierzone zadanie | Czy ten przykład pasuje? |
|---|---|
Dopisanie tekstu do ostatnio edytowanego pliku .txt |
Tak |
| Dopisanie tekstu do pliku z najpóźniejszą datą w nazwie | Nie; nazwy plików nie są interpretowane jako daty |
| Dopisanie tekstu do ostatnio utworzonego pliku | Nie; czas utworzenia nie jest używany |
| Uwzględnienie plików w podfolderach | Nie; wybór ogranicza się do jednego folderu |
| Dopisanie tekstu do dokumentu sformatowanego lub PDF | Nie; ten przykład zapisuje zwykły tekst |
Finder umożliwia przydatne sprawdzenie wizualne. Otwórz folder w widoku listy i kliknij nagłówek kolumny Data modyfikacji; w razie potrzeby kliknij ponownie, aby najnowszy element znalazł się na górze. Apple opisuje sortowanie według kolumn i odwracanie kolejności. Widok Findera pomaga sprawdzić wynik, ale skrypt sam wybiera plik. Sortowanie i porządkowanie rzeczy w Finderze na Macu
Utwórz tymczasowy folder przykładowy
Przykład wykorzystuje folder Shortcut Append Demo w katalogu domowym. Konfiguracja celowo przerywa działanie, jeśli folder o tej nazwie już istnieje, zamiast ponownie wykorzystywać jego zawartość. Tworzy dwa sztuczne pliki tekstowe z dwusekundową przerwą, dzięki czemu czas modyfikacji drugiego pliku powinien być późniejszy.
Otwórz Terminal, wklej cały poniższy blok konfiguracji i naciśnij Return. Cytowany dokument here uruchamia polecenia w osobnym procesie zsh, więc błąd konfiguracji kończy ten proces.
/bin/zsh <<'ZSH'
emulate -L zsh
setopt ERR_EXIT
folder="$HOME/Shortcut Append Demo"
if ! /bin/mkdir "$folder"; then
printf '%s\n' 'Setup stopped: use a new folder name if this one exists.' >&2
exit 1
fi
printf '%s\n' 'Sample entry: blue notebook.' > "$folder/older.txt"
/bin/sleep 2
printf '%s\n' 'Sample entry: green notebook.' > "$folder/newer.txt"
printf 'Example folder: %s\n' "$folder"
ZSH
Konfiguracja używa przekierowania wyjścia, aby utworzyć pliki dopiero po pomyślnym utworzeniu nowego folderu. Apple rozróżnia zwykłe przekierowanie wyjścia, które zapisuje wynik polecenia do pliku, od przekierowania dopisującego, które dodaje wynik na końcu. Przekierowywanie wejścia i wyjścia w Terminalu na Macu
Jeśli konfiguracja zgłosi, że folder już istnieje, wybierz inną tymczasową nazwę i zmień przypisanie folderu zarówno w konfiguracji, jak i w skrypcie skrótu poniżej. Nie uruchamiaj ponownie pojedynczych wierszy zapisujących pliki w istniejącym folderze.
Utwórz skrót i zachowaj tekst wejściowy
Utwórz nowy skrót w aplikacji Skróty i nadaj mu nazwę Append to Newest Text File. Wyszukaj odpowiednie czynności i dodaj je w podanej kolejności. Apple opisuje wyszukiwanie w bibliotece czynności oraz sprawdzanie za pomocą Pokaż informacje, jakie dane wejściowe przyjmuje dana czynność i jakie dane wyjściowe zwraca. Poruszanie się po liście czynności w Skrótach na Macu
- Dodaj czynność
Tekstz przykładowym wpisemSample entry: orange notebook. - Bezpośrednio po niej dodaj czynność
Uruchom skrypt powłoki. - Jako powłokę wybierz
/bin/zsh. - Ustaw dane wejściowe skryptu na wynik poprzedniej czynności
Tekst. - Ustaw
Przekaż dane wejściowenajako argumenty. - Zastąp zawartość pola skryptu pełnym skryptem z następnej sekcji.
Oczekiwane połączenie to jedna wartość Tekst przekazana jako jeden argument skryptu. Skrypt odczytuje ten argument jako $1. Wynikiem pomyślnego działania jest potwierdzenie tekstowe zawierające ścieżkę docelową; ta ścieżka nie jest obiektem Plik w Skrótach, a wynik nie zawiera całej treści pliku.
Pozostaw dane wejściowe połączone z wynikiem czynności Tekst. Przekazanie pliku, listy nazw plików lub niezwiązanego wejścia skrótu zmieniłoby to, co trafia do skryptu. Skrypt sprawdza liczbę argumentów, więc nieoczekiwany zbiór danych wejściowych nie zostanie dopisany jako kilka wpisów.
Jeśli skrypty są wyłączone, otwórz Skróty > Ustawienia, wybierz Zaawansowane i włącz Zezwalaj na uruchamianie skryptów. Apple opisuje te ustawienia jako sposób zezwalania na skrypty w skrótach. Instrukcje Apple dotyczące ustawień skryptów
Dodaj skrypt wybierający plik i dopisujący tekst
Wklej cały ten program do czynności Uruchom skrypt powłoki. Nie wymaga pobierania narzędzi ani tworzenia osobnego pliku skryptu. Przypisanie folderu odpowiada konfiguracji tymczasowej opisanej powyżej.
emulate -L zsh
unsetopt CLOBBER APPEND_CREATE
fail() {
printf '%s\n' "$1" >&2
exit 1
}
(( $# == 1 )) || fail 'Expected exactly one text input.'
[[ -n "$1" ]] || fail 'The text input is empty.'
folder="$HOME/Shortcut Append Demo"
[[ -d "$folder" ]] || fail 'The example folder does not exist.'
files=( "$folder"/*.txt(N.om) )
(( ${#files} > 0 )) || fail 'No eligible .txt files were found.'
newest="${files[1]}"
if (( ${#files} > 1 )); then
[[ "$newest" -nt "${files[2]}" ]] ||
fail 'The newest timestamp is tied or the folder changed. Check the files.'
fi
[[ -f "$newest" && ! -L "$newest" ]] ||
fail 'The selected file is no longer an eligible regular file.'
[[ -w "$newest" ]] || fail 'The selected file is not writable.'
if ! printf '\n%s\n' "$1" >> "$newest"; then
fail 'Append failed; inspect the selected file before retrying.'
fi
printf 'Appended to: %s\n' "$newest"
Wyrażenie wyboru tworzy tablicę pasujących ścieżek plików. W (N.om), N dopuszcza brak dopasowań, . ogranicza dopasowania do zwykłych plików, a om sortuje według czasu modyfikacji, umieszczając najnowszy plik na początku. Przechowywanie ścieżek w tablicy zapobiega dzieleniu nazw plików w miejscach, gdzie występują spacje. Rozwijanie
Następny test wymaga, aby pierwszy plik był ściśle nowszy od drugiego. Jeśli ich czasy modyfikacji są identyczne, skrót przerywa działanie zamiast po cichu wybierać jeden z nich. Dokumentacja zsh opisuje -nt do porównywania wieku plików, a także użyte tutaj testy na zwykły plik, dowiązanie symboliczne i możliwość zapisu. Wyrażenia warunkowe
Polecenie dopisujące używa stałego formatu printf i przekazuje wpis jako argument %s. Dzięki temu znaki procentu i ukośniki odwrotne we wpisie są traktowane jako tekst, a nie dodatkowe instrukcje formatowania. Początkowy znak nowego wiersza oddziela wpis od istniejącego tekstu, a końcowy znak nowego wiersza go zamyka. Jeśli plik już kończy się znakiem nowego wiersza, między wpisami pojawi się pusty wiersz. Wbudowane polecenia powłoki
Skrypt usuwa również ustawienia CLOBBER i APPEND_CREATE. Dokumentacja zsh podaje, że po usunięciu obu tych opcji przekierowanie dopisujące kończy się błędem, jeśli plik docelowy nie istnieje. Ma to znaczenie, gdy wybrany plik zniknie przed dopisaniem: skrypt powinien zgłosić błąd, zamiast utworzyć nowy plik pod poprzednią ścieżką. Przekierowanie
Sprawdź wynik na plikach przykładowych
Uruchom skrót raz. Jeśli przykładowy folder nie został zmieniony, oczekiwaną ścieżką docelową jest newer.txt. Otwórz ten plik i sprawdź, czy zawiera poniższy tekst. To oczekiwany rezultat wynikający z przykładu, a nie stwierdzenie, że przeprowadzono test w interfejsie Maca.
Sample entry: green notebook.
Sample entry: orange notebook.
Otwórz także older.txt. Powinien nadal zawierać tylko Sample entry: blue notebook. Sprawdzenie obu plików potwierdza dwa elementy zadania: wybór jednego pliku docelowego i zachowanie drugiego pliku bez zmian.
Zmień czynność Tekst na Sample entry: yellow notebook. i uruchom skrót ponownie, aby dodać drugi przykładowy wpis. Powinien pojawić się kolejny oddzielony wpis w newer.txt, o ile żaden inny kwalifikujący się plik nie stał się nowszy. Dwukrotne uruchomienie skrótu z tym samym tekstem dopisze go dwa razy; ten program nie wykrywa zduplikowanych wpisów.
Przykłady sprawdzono na podstawie dokumentacji, ale nie uruchomiono ich tutaj: dostępne środowisko nie ma ani Skrótów dla macOS, ani zsh. Zanim zmienisz przypisanie folderu, sprawdź działanie na tymczasowych plikach na swoim Macu.
Poznaj działanie pustych folderów, kolizji i zmieniających się plików
Ten sposób wymaga istniejącego pliku docelowego. Brak folderu, pusty folder lub folder zawierający wyłącznie niekwalifikujące się elementy powoduje błąd przed dopisaniem tekstu. Skrypt nie tworzy pliku domyślnego, nie wybiera podfolderu ani nie przechodzi do dokumentu o innej nazwie.
Kolizji nazw unika się, całkowicie rezygnując z tworzenia pliku docelowego. Konfiguracja przerywa działanie, gdy folder o podanej nazwie już istnieje. Podczas zwykłego uruchamiania skrótu wybrany plik zachowuje swoją nazwę: skrypt go nie zmienia ani nie zapisuje drugiej kopii. Zachowanie w przypadku braku pliku określają osobno udokumentowane opcje dopisywania w zsh. Przekierowanie
Jeśli wynik różni się od oczekiwanego, wykonaj tę krótką diagnostykę:
- Sprawdź przypisanie folderu. Musi wskazywać folder utworzony podczas konfiguracji.
- Sprawdź kryteria wyboru. Wzorzec z przykładu obejmuje widoczne zwykłe pliki kończące się małymi literami
.txt, znajdujące się na najwyższym poziomie folderu. - Sprawdź kolejność według modyfikacji. Zobacz
Datę modyfikacjiw Finderze, pamiętając, że edycja pliku może sprawić, że zostanie on kolejnym celem. - Sprawdź identyczne znaczniki czasu. Edytuj i zapisz wybrany plik przykładowy później, a następnie ponownie sprawdź kolejność.
- Sprawdź połączenie czynności. Jedna wartość tekstowa musi dotrzeć do powłoki jako jeden argument.
Skrypt jest przeznaczony do folderu, którego zawartość nie zmienia się podczas działania. Wybór i zapis to osobne operacje: inny proces może w międzyczasie zmodyfikować, zastąpić lub dodać plik. Te kontrole nie zmieniają przebiegu w transakcję, a błąd zapisu może pozostawić częściowo dopisany wpis. Po błędzie dopisywania sprawdź plik przed ponowną próbą.
Kiedy używać natywnych filtrów plików
Apple opisuje Filtruj pliki jako czynność, która przyjmuje zawartość, zawęża ją za pomocą filtrów i przekazuje dalej pasujące wyniki. Jej ogólne ustawienia filtrowania pozwalają sortować wyniki i ograniczać ich liczbę. Pomagają wybrać plik, ale same nie dopisują tekstu. Wprowadzenie do czynności Znajdź i Filtruj, Dodawanie parametrów filtra
W tym przewodniku wybór i zapis odbywają się razem w skrypcie powłoki, dzięki czemu wzorzec plików, zachowanie przy identycznych znacznikach czasu i wymóg istnienia pliku są jasno określone. Jeśli utworzysz inny łańcuch czynności korzystający z plików, najpierw sprawdź Pokaż informacje każdej czynności: wynik typu Plik, zawartość pliku przekonwertowana na Tekst i ścieżka przedstawiona jako Tekst to różne wartości. Apple udostępnia opisy czynności właśnie po to, by określić typy danych wejściowych i wyjściowych. Poruszanie się po liście czynności w Skrótach na Macu
Gdy przykład działa zgodnie z oczekiwaniami, zachowaj jasne założenia przy dostosowywaniu: jeden wpis tekstowy, jeden wyznaczony folder lokalny i jeden ściśle najnowszy kwalifikujący się plik. Dzięki temu każde uruchomienie jest przewidywalne i wiadomo, gdzie szukać przyczyny, gdy skrót się zatrzyma.
Źródła
- Poznaj Skróty dla macOS — Apple Developer.
- Poruszanie się po liście czynności w Skrótach na Macu — Apple Support.
- Zaawansowane ustawienia prywatności i bezpieczeństwa w Skrótach na Macu — Apple Support.
- Sortowanie i porządkowanie rzeczy w Finderze na Macu — Apple Support.
- Przekierowywanie wejścia i wyjścia w Terminalu na Macu — Apple Support.
- Wprowadzenie do czynności Znajdź i Filtruj w Skrótach na Macu — Apple Support.
- Dodawanie parametrów filtra do czynności Znajdź i Filtruj w Skrótach na Macu — Apple Support.
- 14 Rozwijanie — The Zsh Development Group.
- 12 Wyrażenia warunkowe — The Zsh Development Group.
- 17 Wbudowane polecenia powłoki — The Zsh Development Group.
- 7 Przekierowanie — The Zsh Development Group.