Чтобы очистить папку для повторного использования, сохранив саму папку, создайте быструю команду на Mac, которая удаляет только её содержимое. В этом руководстве используются фиксированная папка, временные текстовые файлы и shell-скрипт, который проверяет папку перед очисткой.

Задача — очищать одну папку между партиями созданных файлов. В примере есть обычные файлы, имя файла с пробелами, скрытый файл и вложенная папка. Скрипт напрямую удаляет это содержимое, не перемещая его в Корзину. В опубликованном Apple руководстве rm описаны рекурсивное удаление и сообщения об ошибках. Руководство Apple rm

Решите, что должно остаться после очистки

В этом сценарии результатом должна быть существующая пустая папка по тому же пути. Вложенные папки также считаются выходными данными, поэтому они удаляются вместе с содержимым. Если в каталоге с результатами есть шаблоны или постоянная структура подпапок, перед использованием этого скрипта потребуется изменить правило выбора элементов.

В примере используется папка Shortcut Output Demo непосредственно в домашней папке. Фиксированный путь упрощает проверку быстрой команды: её поведение не зависит от того, какое окно Finder открыто и какой файл выбран.

Требование Поведение в этом руководстве
Сохранить папку с результатами В rm передаются только пути к её дочерним элементам
Включить скрытые результаты Параметр Bash dotglob включает имена, начинающиеся с точки
Обработать уже пустую папку Пустой список дочерних элементов допустим
Обработать отсутствующую папку Остановиться с ошибкой, не создавать папку заново
Удалить вложенные результаты Рекурсивно удалить каждую вложенную папку
Сохранить возможность использовать команду Finder «Вернуть на место» Вместо этого воспользуйтесь приведённым ниже способом через Finder

Finder предлагает удобный вариант, если нужно, чтобы элементы оставались в Корзине. Откройте папку с результатами, выберите в ней временные элементы и нажмите Command-Delete. Не выбирайте саму содержащую их папку. По документации Apple, перемещённые в Корзину элементы остаются там, пока Корзина не будет очищена; их можно восстановить командой Файл > Вернуть на место. Удаление файлов и папок на Mac

Создайте временную папку для первого запуска

Откройте Терминал и вставьте весь блок подготовки ниже. Он создаёт только искусственные текстовые файлы. Команда mkdir должна успешно выполниться до записи файлов, поэтому, если элемент с именем Shortcut Output Demo уже существует, подготовка остановится и не станет использовать его содержимое.

/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

Откройте домашнюю папку в Finder и найдите Shortcut Output Demo. В ней находятся три видимых элемента: alpha.txt, sample output.txt и Batch. Четвёртый элемент, .demo-marker, намеренно скрыт. В папке Batch находится nested.txt. Это примеры входных данных для проверки, а не существующие файлы пользователя.

Если подготовка остановилась, потому что имя уже занято, не трогайте существующий элемент. Выберите другое свободное имя для тестовой папки и измените присваивание целевого пути и в блоке подготовки, и в скрипте очистки. Не удаляйте начальную проверку создания, чтобы обойти конфликт имён.

Создайте быструю команду и сохраните типы её входных и выходных данных

В приложении «Быстрые команды» нажмите кнопку добавления, чтобы создать быструю команду, и назовите её Clear Demo Output. Найдите в списке действий Run Shell Script и добавьте это действие. Apple описывает создание быстрых команд путём добавления действий и поиск действий по названию. Создание собственной быстрой команды на Mac, Навигация по списку действий в приложении «Быстрые команды» на Mac

Установите для параметра Shell значение /bin/bash, затем замените образец команд полным скриптом очистки ниже. В нём используются массивы Bash и shopt, поэтому оставьте выбранную оболочку. Целевой путь берётся из присваивания в скрипте; скрипт не использует входные данные быстрой команды, стандартный ввод или аргументы командной строки.

Если выполнение скриптов отключено, выберите Быстрые команды > Настройки, откройте раздел Дополнительно и включите Разрешить выполнение скриптов. Apple описывает эту настройку для запуска скриптов из быстрых команд. Настройка 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"

При успешном выполнении действие возвращает текст: строку, начинающуюся с Folder is empty:. Это не объект Folder, не список удалённых файлов и не ссылка на папку для повторного использования. Если вы позже расширите быструю команду, явно передайте целевую папку каждому действию, которому нужна папка. В информационной панели действия Apple указывает допустимые входные данные и выходной результат. Чтобы проверить их, щёлкните значок действия, удерживая Control, и выберите Show Info. Просмотр сведений о входных и выходных данных действия

Чтобы увидеть сообщение о завершении, добавьте после скрипта действие Show Alert и вставьте в сообщение переменную с выходными данными скрипта. Apple описывает передачу выходных данных предыдущего действия в Show Alert для проверки. Фиксированное сообщение об очистке папки менее информативно, чем фактический результат скрипта. Использование действия Show Alert в быстрой команде на Mac

Разберитесь, почему папка остаётся на месте

Присваивание items=( "$target"/* ) собирает пути к дочерним элементам папки. Цикл отдельно передаёт каждый дочерний элемент в rm; сам путь "$target" не передаётся. Поэтому рекурсивное удаление применяется к вложенным папкам с результатами, а родительская папка для повторного использования остаётся на месте.

Два параметра Bash помогают справиться с типичными проблемами при очистке. dotglob включает имена файлов, начинающиеся с точки, а nullglob разворачивает шаблон, не совпавший ни с одним именем, в пустое значение. Кавычки при раскрытии массива сохраняют имена с пробелами как отдельные аргументы. Эти особенности описаны в руководстве Bash, распространяемом Apple. Руководство Bash: раскрытие шаблонов путей и массивы

Команда удаления использует -R для вложенных папок и --, чтобы завершить разбор параметров. Скрипт проверяет результат каждой команды и останавливается при ошибке. В руководстве Apple по rm указано, что при ошибке возвращается ненулевой код завершения. Удаление не является транзакцией: ошибка при обработке следующего элемента не восстанавливает уже удалённые элементы. Руководство Apple по rm

Скрипт также отклоняет целевой путь, если он является символической ссылкой. Используйте этот пример только для обычной локальной папки с результатами, без подключённых томов внутри неё. Перед очисткой остановите процесс, создающий результаты: файлы, появившиеся во время или после запуска, могут нарушить ожидание, что папка останется пустой.

Проверьте первый и повторные запуски

Запустите быструю команду кнопкой запуска в редакторе. Прежде чем менять целевой путь, проверьте результат по этому списку. Apple описывает проверку собственной быстрой команды прямо из редактора. Проверка собственной быстрой команды

  1. Убедитесь в Finder, что Shortcut Output Demo по-прежнему существует.
  2. Убедитесь, что видимые примеры файлов и папка Batch исчезли.
  3. Убедитесь, что скрипт вернул сообщение о пустой папке; итоговая проверка учитывает и скрытые элементы.
  4. Запустите быструю команду ещё раз. Для уже пустой папки должно появиться то же сообщение.
  5. Временно переименуйте пустую тестовую папку и запустите команду ещё раз. Скрипт должен остановиться с ошибкой об отсутствующей папке. Затем верните прежнее имя.

Синтаксис скрипта очистки проверен командой Bash bash -n. В рамках подготовки этой статьи скрипт не запускался в приложении «Быстрые команды» на macOS, поэтому последовательность с временной папкой остаётся частью настройки.

Если удалить элементы не удалось, перед повторной попыткой проверьте указанный элемент и оставшееся содержимое папки. Отсутствующая целевая папка, каталог без прав на чтение и ошибка удаления — это разные условия; скрипт не выдаёт для них сообщение об успехе.

Используйте папку повторно, не полагаясь на обработку совпадений имён

Когда временная проверка даст ожидаемый результат, измените присваивание целевого пути на выбранную вами папку с результатами. Сначала просмотрите её содержимое и придерживайтесь того же правила: всё внутри заменяемо, включая скрытые элементы и вложенные папки.

Очистка папки удаляет существующие в тот момент имена. Она не определяет, что произойдёт при следующем экспорте или сохранении, если два новых результата получат одинаковые имена. Проверьте параметры и описание соответствующего действия, не предполагая, что очистка включает замену, объединение или автоматическое переименование. Apple предоставляет описания действий через Show Info. Проверка поведения действия

Сохранённую быструю команду также можно запустить из Терминала полной командой ниже. Apple описывает, как заключать в кавычки имена быстрых команд с пробелами, и указывает, что команда shortcuts возвращает 0 при успехе или 1 при ошибке. Запуск быстрых команд из командной строки

shortcuts run "Clear Demo Output"

Планируйте очистку и создание результатов в определённом порядке: завершите предыдущую партию, очистите выбранную папку, проверьте результат, затем создайте следующую партию. Так назначение папки для повторного использования остаётся ясным, а повторные запуски — предсказуемыми.

Источники