폴더 자체는 유지하면서 재사용 가능한 출력 폴더를 비우려면, 폴더의 하위 항목만 제거하는 Mac 단축어를 만드세요. 이 안내에서는 고정된 폴더와 삭제해도 되는 텍스트 파일, 폴더를 비우기 전에 확인하는 셸 스크립트를 사용합니다.
이 작업의 목적은 생성된 파일 묶음 사이에 폴더 하나를 초기화하는 것입니다. 예시에는 일반 파일, 이름에 공백이 있는 파일, 숨김 파일, 중첩된 폴더가 포함됩니다. 스크립트는 이러한 항목을 휴지통으로 옮기지 않고 바로 삭제합니다. Apple이 공개한 rm 설명서에는 재귀 삭제와 오류 보고에 관한 내용이 있습니다. Apple의 rm 설명서
비운 뒤 남길 항목 정하기
이 작업 방식에서 기대하는 결과는 같은 경로에 폴더가 그대로 남고, 그 안은 비어 있는 상태입니다. 내부의 하위 폴더도 출력 항목이므로 그 안의 내용과 함께 삭제됩니다. 출력 디렉터리에 템플릿이나 영구적인 하위 폴더 구조가 있다면, 이 스크립트를 사용하기 전에 항목을 선택하는 규칙을 다르게 정해야 합니다.
예시 대상은 홈 폴더 바로 아래에 있는 Shortcut Output Demo입니다. 대상을 고정하면 단축어를 쉽게 확인할 수 있습니다. 동작이 열려 있는 Finder 윈도우나 선택된 파일에 좌우되지 않습니다.
| 요구 사항 | 이 안내의 동작 방식 |
|---|---|
| 출력 폴더 유지 | 하위 경로만 rm에 전달합니다 |
| 숨김 출력 항목 포함 | Bash의 dotglob 옵션이 점으로 시작하는 이름을 포함합니다 |
| 이미 비어 있는 폴더 처리 | 하위 항목 목록이 비어 있어도 허용합니다 |
| 폴더가 없는 경우 처리 | 오류와 함께 중단하며 폴더를 다시 만들지 않습니다 |
| 중첩된 출력 항목 삭제 | 각 하위 폴더를 재귀적으로 삭제합니다 |
Finder의 Put Back 사용 가능성 유지 |
대신 아래의 Finder 대안을 사용합니다 |
항목을 휴지통에 남겨 두려면 Finder를 사용하는 방법이 유용합니다. 출력 폴더를 열고, 그 안에서 삭제해도 되는 항목을 선택한 뒤 Command-Delete를 누르세요. 이를 담고 있는 폴더는 선택하지 마세요. Apple에 따르면 휴지통으로 옮긴 항목은 휴지통을 비울 때까지 그곳에 남아 있으며 File > Put Back으로 복원할 수 있습니다. Mac에서 파일 및 폴더 삭제하기
첫 실행을 위한 삭제 가능한 폴더 만들기
Terminal을 열고 아래의 설정 블록 전체를 붙여 넣으세요. 가상의 텍스트 파일만 만듭니다. 파일을 쓰기 전에 맨 처음의 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을 사용하므로 해당 셸을 선택된 상태로 두세요. 대상 경로는 스크립트 안의 할당문에서 가져옵니다. 단축어 입력, 표준 입력, 명령줄 인수를 사용하지 않습니다.
스크립트가 비활성화되어 있다면 Shortcuts > Settings를 선택하고 Advanced를 연 다음 Allow Running Scripts를 활성화하세요. 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에 전달하는 방법을 안내합니다. 폴더가 비었다는 고정 메시지보다 스크립트의 실제 결과를 표시하는 편이 유용합니다. Mac에서 단축어의 Show Alert 동작 사용하기
폴더가 유지되는 이유 이해하기
items=( "$target"/* ) 할당문은 하위 경로를 모읍니다. 반복문은 각 하위 항목을 개별적으로 rm에 전달하며, \"$target\" 자체는 전달하지 않습니다. 따라서 재귀 삭제는 출력 하위 폴더에 적용되고 재사용할 상위 폴더는 그대로 남습니다.
흔히 발생하는 초기화 문제는 Bash 옵션 두 가지로 처리합니다. dotglob은 점으로 시작하는 파일 이름을 포함하고, nullglob는 패턴과 일치하는 항목이 없을 때 아무것도 확장하지 않도록 합니다. 따옴표로 묶인 배열 확장은 공백이 있는 파일 이름을 각각 하나의 인수로 유지합니다. 이러한 동작은 Apple이 배포하는 Bash 설명서에 나와 있습니다. Bash 설명서: 경로명 확장 및 배열
삭제 명령은 중첩된 폴더에 -R을 사용하고, 옵션 처리를 끝내기 위해 --을 사용합니다. 각 명령의 결과를 확인하고 실패하면 중단합니다. Apple의 rm 설명서에 따르면 오류가 발생하면 0이 아닌 종료 상태를 반환합니다. 삭제는 트랜잭션이 아닙니다. 나중에 처리하는 하위 항목에서 실패해도 이미 삭제된 항목이 복원되지는 않습니다. Apple의 rm 설명서
스크립트는 대상이 심볼릭 링크인 경우에도 거부합니다. 이 예시는 내부에 마운트된 볼륨이 없는 일반 로컬 출력 폴더에만 사용하세요. 비우기 전에 출력 생성 프로세스를 모두 중지하세요. 실행 중이나 실행 후에 파일이 생성되면 폴더가 계속 비어 있으리라는 기대가 깨질 수 있습니다.
첫 실행과 반복 실행 확인하기
편집기의 실행 버튼으로 단축어를 실행하세요. 대상 경로를 바꾸기 전에 다음 순서에 따라 결과를 확인하세요. Apple은 편집기에서 사용자화 단축어를 테스트하는 방법을 안내합니다. 사용자화 단축어 테스트하기
- Finder에서
Shortcut Output Demo가 여전히 존재하는지 확인합니다. - 표시되는 예시 파일과
Batch폴더가 사라졌는지 확인합니다. - 스크립트가 빈 폴더 메시지를 반환했는지 확인합니다. 마지막 검사는 숨김 하위 항목도 확인합니다.
- 단축어를 다시 실행합니다. 이미 비어 있는 폴더에서도 같은 메시지가 표시되어야 합니다.
- 비어 있는 예시 폴더의 이름을 잠시 바꾸고 다시 실행합니다. 스크립트가 폴더가 없다는 오류와 함께 중단되어야 합니다. 이후 이름을 원래대로 복원합니다.
삭제 스크립트는 bash -n으로 Bash 구문 검사를 통과했습니다. 이 글에서는 macOS 단축어 앱에서 실제 실행하지 않았으므로, 삭제 가능한 폴더를 이용한 첫 실행 절차를 설정에 포함했습니다.
삭제에 실패하면 다시 시도하기 전에 보고된 항목과 폴더에 남아 있는 내용을 확인하세요. 대상이 없거나 디렉터리를 읽을 수 없거나 삭제가 실패한 경우는 서로 다른 상태이며, 스크립트는 이를 성공 메시지로 처리하지 않습니다.
충돌 처리를 가정하지 않고 폴더 재사용하기
삭제 가능한 테스트가 예상대로 동작하면 대상 할당을 원하는 출력 폴더로 바꾸세요. 먼저 내용을 확인하고 같은 원칙을 적용하세요. 숨김 항목과 하위 폴더를 포함해 폴더 안의 모든 항목을 교체할 수 있는 출력물로 간주해야 합니다.
폴더를 비우면 그 시점에 존재하는 이름의 항목이 삭제됩니다. 이후 내보내기나 저장 동작에서 새 출력 두 개의 이름이 같을 때 어떻게 처리할지는 정해 주지 않습니다. 초기화로 대체, 병합, 자동 이름 변경이 활성화된다고 가정하지 말고 해당 동작의 옵션과 설명을 확인하세요. Apple은 Show Info를 통해 동작 설명을 제공합니다. 동작의 동작 방식 확인하기
아래의 전체 명령으로 저장된 단축어를 Terminal에서 실행할 수도 있습니다. Apple은 이름에 공백이 있는 단축어를 인용 부호로 묶는 방법을 안내하며, shortcuts 명령은 성공 시 0, 오류 시 1을 반환한다고 설명합니다. 명령줄에서 단축어 실행하기
shortcuts run "Clear Demo Output"
출력물을 만들고 비우는 순서를 명확하게 지키세요. 이전 작업 묶음을 끝내고, 선택한 폴더를 비우고, 결과를 확인한 다음 새 작업 묶음을 만드세요. 이렇게 하면 재사용 폴더의 목적이 분명해지고 반복 실행도 예측하기 쉬워집니다.
출처
- Mac에서 사용자화 단축어 만들기 — Apple 지원.
- Mac용 단축어 앱에서 동작 목록 탐색하기 — Apple 지원.
- Mac용 단축어 앱의 고급 개인정보 보호 및 보안 설정 — Apple 지원.
- Mac에서 단축어의 Show Alert 동작 사용하기 — Apple 지원.
- Mac에서 파일 및 폴더 삭제하기 — Apple 지원.
- 명령줄에서 단축어 실행하기 — Apple 지원.
- rm.1 — Apple 오픈 소스 배포판.
- bash.1 — Apple 오픈 소스 배포판.