Aby wyczyścić folder wielokrotnego użytku, zachowując sam folder, utwórz skrót na Macu, który usuwa tylko jego zawartość. W tym przewodniku użyjemy stałego folderu, tymczasowych plików tekstowych i skryptu powłoki, który sprawdza folder przed jego wyczyszczeniem.

Celem jest wyzerowanie jednego folderu między kolejnymi partiami wygenerowanych plików. Przykład obejmuje zwykłe pliki, nazwę pliku ze spacjami, ukryty plik i folder zagnieżdżony. Skrypt usuwa tę zawartość bezpośrednio; nie przenosi jej do Kosza. Opublikowana przez Apple instrukcja obsługi rm opisuje rekurencyjne usuwanie i zgłaszanie błędów. Instrukcja obsługi rm Apple

Zdecyduj, co ma pozostać po wyczyszczeniu

W tym przypadku oczekiwanym rezultatem jest istniejący, pusty folder pod tą samą ścieżką. Wszystkie znajdujące się w nim podfoldery również są danymi wyjściowymi, więc zostaną usunięte wraz z zawartością. Jeśli katalog wyjściowy zawiera szablony lub stałą strukturę podfolderów, przed użyciem tego skryptu trzeba zastosować inną regułę wyboru elementów do usunięcia.

Przykładowym celem jest Shortcut Output Demo, znajdujący się bezpośrednio w folderze domowym. Stała lokalizacja celu ułatwia sprawdzenie skrótu: jego działanie nie zależy od tego, które okno Findera jest otwarte ani który plik jest zaznaczony.

Wymaganie Działanie w tym przewodniku
Zachowanie folderu wyjściowego Do rm przekazywane są tylko ścieżki elementów podrzędnych
Uwzględnienie ukrytych danych wyjściowych Opcja dotglob powłoki Bash uwzględnia nazwy zaczynające się od kropki
Obsługa już pustego folderu Pusta lista elementów podrzędnych jest akceptowana
Obsługa brakującego folderu Zatrzymanie z błędem; folder nie jest tworzony ponownie
Usuwanie zagnieżdżonych danych wyjściowych Każdy folder podrzędny jest usuwany rekurencyjnie
Zachowanie możliwości użycia polecenia Findera Odłóż Zamiast tego użyj poniższej metody w Finderze

Finder oferuje przydatną alternatywę, jeśli chcesz, aby elementy pozostały w Koszu. Otwórz folder wyjściowy, zaznacz znajdujące się w nim zbędne elementy i naciśnij Command-Delete. Nie zaznaczaj folderu nadrzędnego. Apple informuje, że elementy przeniesione do Kosza pozostają tam do jego opróżnienia i można je przywrócić za pomocą polecenia Plik > Odłóż. Usuwanie plików i folderów na Macu

Utwórz tymczasowy folder na potrzeby pierwszego uruchomienia

Otwórz Terminal i wklej cały poniższy blok konfiguracji. Tworzy on wyłącznie przykładowe pliki tekstowe. Początkowe polecenie mkdir musi się powieść, zanim zostaną zapisane jakiekolwiek pliki, więc jeśli element o nazwie Shortcut Output Demo już istnieje, konfiguracja zatrzyma się zamiast użyć jego zawartości ponownie.

/bin/bash <<'BASH'
set -eu
target="$HOME/Shortcut Output Demo"

if ! /bin/mkdir "$target"; then
  printf 'Setup stopped: choose an unused demo folder name.\n' >&2
  exit 1
fi

/bin/mkdir "$target/Batch"
printf 'Synthetic output A\n' > "$target/alpha.txt"
printf 'Synthetic output B\n' > "$target/sample output.txt"
printf 'Synthetic marker\n' > "$target/.demo-marker"
printf 'Synthetic nested output\n' > "$target/Batch/nested.txt"
printf 'Created disposable examples in: %s\n' "$target"
BASH

Otwórz folder domowy w Finderze i znajdź Shortcut Output Demo. Zawiera trzy widoczne elementy podrzędne: alpha.txt, sample output.txt i Batch. Czwarty element, .demo-marker, jest celowo ukryty. W folderze Batch znajduje się nested.txt. To przykładowe dane testowe, a nie istniejące pliki użytkownika.

Jeśli konfiguracja zatrzyma się, ponieważ nazwa jest już zajęta, pozostaw istniejący element bez zmian. Wybierz inną nieużywaną nazwę folderu testowego i zmień przypisanie celu zarówno w konfiguracji, jak i w skrypcie czyszczącym. Nie usuwaj początkowego sprawdzenia tworzenia folderu tylko po to, by ominąć konflikt nazw.

Utwórz skrót i zachowaj typy jego danych wejściowych i wyjściowych

W aplikacji Skróty kliknij przycisk dodawania, aby utworzyć skrót, i nazwij go Clear Demo Output. Wyszukaj na liście czynności Run Shell Script i dodaj tę czynność. Apple opisuje tworzenie skrótów przez dodawanie czynności oraz wyszukiwanie ich na liście według nazwy. Tworzenie własnego skrótu na Macu, Poruszanie się po liście czynności w Skrótach na Macu

Ustaw Shell tej czynności na /bin/bash, a następnie zastąp przykładowe polecenia kompletnym skryptem czyszczącym poniżej. Skrypt korzysta z tablic Bash i shopt, więc pozostaw wybraną tę powłokę. Odczytuje cel z przypisania w skrypcie; nie używa danych wejściowych skrótu, standardowego wejścia ani argumentów wiersza poleceń.

Jeśli skrypty są wyłączone, wybierz Skróty > Ustawienia, otwórz Zaawansowane i włącz Zezwalaj na uruchamianie skryptów. Apple opisuje to ustawienie jako wymagane do uruchamiania skryptów ze skrótów. Ustawienie uruchamiania skryptów Apple

set -u
target="$HOME/Shortcut Output Demo"

if [[ ! -d "$target" || -L "$target" ]]; then
  printf 'Expected an existing ordinary folder: %s\n' "$target" >&2
  exit 1
fi

if [[ ! -r "$target" || ! -x "$target" ]]; then
  printf 'Cannot list the output folder.\n' >&2
  exit 1
fi

unset GLOBIGNORE
set +f
shopt -u failglob
shopt -s dotglob nullglob

items=( "$target"/* )
for item in "${items[@]}"; do
  if ! /bin/rm -R -- "$item"; then
    printf 'Clearing stopped; some items may remain.\n' >&2
    exit 1
  fi
done

remaining=( "$target"/* )
if (( ${#remaining[@]} != 0 )); then
  printf 'The folder still contains items.\n' >&2
  exit 1
fi

printf 'Folder is empty: %s\n' "$target"

Pomyślnym wynikiem tej czynności jest tekst: wiersz zaczynający się od Folder is empty:. Wynik nie jest obiektem typu Folder, listą usuniętych plików ani odwołaniem do folderu wielokrotnego użytku. Jeśli później rozszerzysz skrót, jawnie przekaż folder docelowy każdej czynności, która go wymaga. Panel informacji o czynności w Skrótach pokazuje akceptowane dane wejściowe i wynik; kliknij ikonę czynności z wciśniętym klawiszem Control i wybierz Pokaż informacje, aby je sprawdzić. Wyświetlanie informacji o danych wejściowych i wyjściowych czynności

Aby wyświetlić komunikat o zakończeniu, dodaj po skrypcie czynność Show Alert i wstaw do jej treści zmienną z wynikiem skryptu. Apple opisuje przekazywanie wyniku poprzedniej czynności do Show Alert w celu jego sprawdzenia. Stały komunikat informujący, że folder jest pusty, byłby mniej użyteczny niż wyświetlenie rzeczywistego wyniku skryptu. Używanie czynności Show Alert w skrócie na Macu

Dowiedz się, dlaczego folder pozostaje na miejscu

Przypisanie items=( "$target"/* ) gromadzi ścieżki elementów podrzędnych. Pętla przekazuje każdy element osobno do rm; nigdy nie przekazuje samego \"$target\". Dlatego rekurencyjne usuwanie obejmuje podfoldery z danymi wyjściowymi, a folder nadrzędny wielokrotnego użytku pozostaje na miejscu.

Dwie opcje Bash rozwiązują typowe problemy przy czyszczeniu folderu. dotglob uwzględnia nazwy plików zaczynające się od kropki, a nullglob sprawia, że niedopasowany wzorzec rozwija się do pustej wartości. Cytowane rozwinięcie tablicy zachowuje nazwy plików ze spacjami jako oddzielne argumenty. Działanie tych opcji opisano w rozpowszechnianej przez Apple instrukcji obsługi Bash. Instrukcja Bash: rozwijanie nazw ścieżek i tablice

Polecenie usuwania używa -R do obsługi zagnieżdżonych folderów oraz --, aby zakończyć przetwarzanie opcji. Skrypt sprawdza wynik każdego polecenia i zatrzymuje się w razie błędu. Instrukcja obsługi rm Apple określa niezerowy kod zakończenia w przypadku błędu. Usuwanie nie jest transakcją: błąd przy późniejszym elemencie nie przywróci elementów już usuniętych. Instrukcja obsługi rm Apple

Skrypt odrzuca również cel będący dowiązaniem symbolicznym. Ogranicz użycie tego przykładu do zwykłego lokalnego folderu wyjściowego, który nie zawiera zamontowanych woluminów. Zatrzymaj proces generujący dane wyjściowe przed czyszczeniem: pliki utworzone w jego trakcie lub po nim mogą sprawić, że folder nie pozostanie pusty.

Sprawdź pierwsze i kolejne uruchomienia

Uruchom skrót przyciskiem uruchamiania w edytorze. Zanim zmienisz ścieżkę celu, sprawdź wynik według poniższej listy. Apple opisuje testowanie własnego skrótu w jego edytorze. Testowanie własnego skrótu

  1. Sprawdź w Finderze, czy Shortcut Output Demo nadal istnieje.
  2. Sprawdź, czy widoczne pliki przykładowe i folder Batch zniknęły.
  3. Sprawdź, czy skrypt zwrócił komunikat o pustym folderze; jego końcowe sprawdzenie obejmuje ukryte elementy podrzędne.
  4. Uruchom skrót ponownie. Pusty folder powinien wywołać ten sam komunikat.
  5. Tymczasowo zmień nazwę pustego folderu testowego i uruchom skrót ponownie. Skrypt powinien zatrzymać się z błędem informującym, że folder już nie istnieje. Następnie przywróć jego nazwę.

Skrypt czyszczący przeszedł sprawdzenie składni Bash za pomocą bash -n. Na potrzeby tego artykułu nie został uruchomiony w aplikacji Skróty w systemie macOS, dlatego test z tymczasowym folderem należy wykonać podczas konfiguracji.

Jeśli usuwanie się nie powiedzie, przed ponowną próbą sprawdź wskazany element i pozostałą zawartość folderu. Brakujący cel, nieczytelny katalog i nieudane usunięcie to różne sytuacje; skrypt nie zamienia ich w komunikat o powodzeniu.

Używaj folderu ponownie bez zakładania, jak będą obsługiwane konflikty nazw

Gdy tymczasowy test przyniesie oczekiwany rezultat, zmień przypisanie celu na wybrany folder wyjściowy. Najpierw sprawdź jego zawartość i zachowaj tę samą zasadę: wszystko, co się w nim znajduje, jest zastępowalnymi danymi wyjściowymi, w tym ukryte elementy i podfoldery.

Wyczyszczenie folderu usuwa istniejące w danej chwili nazwy. Nie określa, co stanie się podczas późniejszego eksportu lub zapisywania, gdy dwa nowe pliki będą miały tę samą nazwę. Sprawdź opcje i opis danej czynności, zamiast zakładać, że to czyszczenie umożliwia zastępowanie, scalanie lub automatyczną zmianę nazw. Apple udostępnia opisy czynności przez Pokaż informacje. Sprawdzanie działania czynności

Możesz też uruchomić zapisany skrót z Terminala za pomocą pełnego polecenia poniżej. Apple opisuje ujmowanie nazw skrótów zawierających spacje w cudzysłowy oraz informuje, że polecenie shortcuts zwraca 0 w przypadku powodzenia lub 1 w przypadku błędu. Uruchamianie skrótów z wiersza poleceń

shortcuts run "Clear Demo Output"

Zachowaj świadomą kolejność czyszczenia i tworzenia danych wyjściowych: zakończ poprzednią partię, wyczyść wybrany folder, sprawdź wynik, a następnie utwórz kolejną partię. Dzięki temu folder wielokrotnego użytku ma jasno określone przeznaczenie, a kolejne uruchomienia są przewidywalne.

Źródła