파일의 숨겨진 흔적(메타데이터) 지우기(MACOS)
맥에서 인터넷에서 받은 PDF의 다운로드 주소를 깔끔하게 지우고 보관하자.
인터넷에서 받은 PDF 파일 등에 남은 다운로드 주소 와 작성자 정보 를 깔끔하게 지우는 방법입니다.
1 메타데이터(파일의 이름표)는 왜 두 종류일까?
- 파일에는 눈에 보이는 내용 말고도 메타데이터(파일의 숨겨진 신상정보) 가 들어 있습니다.
- 이 정보는 크게 겉면 스티커(확장 속성) 와 내용물 도장(내부 메타데이터) 두 가지로 나뉩니다.
- 두 정보는 적혀 있는 위치가 다르기 때문에, 각각 다른 전용 지우개(명령어 도구) 를 사용해야 완벽히 지워집니다.

2 겉면 스티커 떼기: xattr
- 인터넷에서 파일을 받으면 맥북이 파일 겉면에 확장 속성(택배 운송장 스티커 같은 추가 정보) 으로 다운로드 주소를 적어둡니다.
xattr은 이 겉면 스티커만 골라서 떼어내는 맥북의 기본 CLI 도구(마우스 대신 글자로 명령을 내리는 프로그램) 입니다.- 질문하셨던 명령어는 아주 정확하며, 뒤에 에러 무시 옵션(스티커가 없어도 조용히 넘어가게 하는 설정) 만 붙이면 완벽합니다.
| 명령어 조각 | 쉬운 뜻풀이 |
|---|---|
| xattr -d | 확장 속성(겉면 스티커)을 삭제(Delete) 해라! |
| com.apple.metadata:kMDItemWhereFroms | 스티커 이름: '어디서 다운로드했는지 적힌 인터넷 주소(URL)' |
| com.apple.quarantine | 스티커 이름: '외부 인터넷에서 가져왔다는 경고 딱지(격리 속성)' |
| "$1" | 내가 첫 번째로 선택한 파일(변수) 에 실행해라! |
| 2>/dev/null | 만약 떼어낼 스티커가 없더라도 에러 메시지를 띄우지 말고 쓰레기통(null)에 버려라! |
3 파일 속 내용물 도장 지우기: exiftool
- 상자 겉면의 스티커(
xattr)를 떼어내도, PDF 파일 내부 메타데이터(문서 안쪽에 찍힌 만든 사람 이름이나 프로그램 도장) 는 그대로 남아 있습니다. exiftool은 아이콘을 눌러 여는 일반 앱이 아니라, 터미널(명령어 입력창)에서 글자로 작동하는 파일 내부 청소 전용 도구 입니다.- 홈브루(Homebrew, 맥북용 프로그램 설치 자판기) 로 한 번만 설치해 두면, 기존 자동화 스크립트에 한 줄만 추가해서 같이 쓸 수 있습니다.
| 명령어 조각 | 쉬운 뜻풀이 |
|---|---|
| brew install exiftool | [최초 1회 설치] 프로그램 자판기(brew)에서 exiftool을 설치 해라! |
| -all:all= | 파일 안쪽에 적힌 모든 내부 정보(작성자, 제목 등)를 빈칸(=)으로 지워라! |
| -overwrite_original | 복사본(백업 파일)을 따로 남기지 말고 원본 파일에 바로 덮어써라! |
4 한 번에 끝내는 최종 스크립트 (맥 오토메이터이용 )
- 맥 오토메이터를 이용하여 만들자. 중요한 포인트는 만들고 -> 보안에서 전체권한설정을 해야한다.
export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"
LOG="$HOME/Downloads/meta_clean.log"
echo "=== $(date) ===" > "$LOG"
left=0
clean_one() {
local p="$1" ro=0 mode=""
# 잠김(uchg) 해제, 읽기 전용이면 잠시 쓰기 권한 부여
chflags nouchg "$p" 2>>"$LOG"
if [ ! -w "$p" ]; then
ro=1; mode=$(stat -f %Lp "$p"); chmod u+w "$p"
fi
# 1. 내부 메타데이터 (회전 정보 유지). 지원 안 하는 형식은 로그에만 남고 넘어감
exiftool -all= -tagsfromfile @ -Orientation -overwrite_original "$p" >>"$LOG" 2>&1
# 2. PDF는 qpdf로 재작성 (설치된 경우만)
if [[ "$p" == *.[pP][dD][fF] ]] && command -v qpdf >/dev/null 2>&1; then
qpdf --linearize --replace-input "$p" >>"$LOG" 2>&1
fi
# 3. 확장 속성은 반드시 마지막에
xattr -c "$p" >>"$LOG" 2>&1
# 권한 원복
[ "$ro" -eq 1 ] && chmod "$mode" "$p"
# 4. 검증: WhereFroms가 남았는지
if xattr "$p" 2>/dev/null | grep -q kMDItemWhereFroms; then
echo "WhereFroms 남음: $p" >>"$LOG"
left=$((left+1))
fi
# Finder '정보 가져오기'의 '어디서' 갱신용 Spotlight 재색인
mdimport "$p" >/dev/null 2>&1
}
for f in "$@"; do
# 파일이든 폴더든 안쪽 파일 전부 처리
while IFS= read -r -d '' p; do
clean_one "$p"
done < <(find "$f" -type f -print0)
done
if [ "$left" -eq 0 ]; then
osascript -e 'display notification "파일 청소가 완료되었습니다." with title "메타데이터 청소"'
else
osascript -e "display notification \"WhereFroms 남은 파일 $left 개. 데스크탑 meta_clean.log 확인\" with title \"메타데이터 청소\""
fi5 Hazel 에서 세팅
필자의 경우 pdf, html, epub 3가지를 조건을 걸었다.

export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"
f="$1"
# 0. 브라우저가 다운로드 마무리(출처·격리 속성 기록)를 끝낼 때까지 대기
sleep 10
# 1. 내부 메타데이터: PDF만
case "$f" in
*.[pP][dD][fF])
exiftool -all:all= -overwrite_original "$f" >/dev/null 2>&1
command -v qpdf >/dev/null 2>&1 && qpdf --linearize --replace-input "$f" >/dev/null 2>&1
;;
esac
# 2. 다운로드 흔적 속성 삭제 (태그 등은 유지)
for a in com.apple.metadata:kMDItemWhereFroms \
com.apple.metadata:kMDItemDownloadedDate \
com.apple.quarantine; do
xattr -d "$a" "$f" 2>/dev/null
done
# 3. Spotlight 색인 갱신 (정보 창 '출처' 반영)
mdimport "$f" >/dev/null 2>&1
# 4. 검증: 남아 있으면 실패 처리 → 알림 안 뜨고 Hazel 로그에 기록
if xattr "$f" 2>/dev/null | grep -q kMDItemWhereFroms; then
echo "WhereFroms 남음: $f" >&2
exit 1
fi
exit 0