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
- Sprawdź w Finderze, czy
Shortcut Output Demonadal istnieje. - Sprawdź, czy widoczne pliki przykładowe i folder
Batchzniknęły. - Sprawdź, czy skrypt zwrócił komunikat o pustym folderze; jego końcowe sprawdzenie obejmuje ukryte elementy podrzędne.
- Uruchom skrót ponownie. Pusty folder powinien wywołać ten sam komunikat.
- 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
- Tworzenie własnego skrótu na Macu — Wsparcie Apple.
- Poruszanie się po liście czynności w Skrótach na Macu — Wsparcie Apple.
- Zaawansowane ustawienia prywatności i ochrony w Skrótach na Macu — Wsparcie Apple.
- Używanie czynności Show Alert w skrócie na Macu — Wsparcie Apple.
- Usuwanie plików i folderów na Macu — Wsparcie Apple.
- Uruchamianie skrótów z wiersza poleceń — Wsparcie Apple.
- rm.1 — Dystrybucje oprogramowania open source Apple.
- bash.1 — Dystrybucje oprogramowania open source Apple.