몇 년에 한 번씩 이런 사소한 문제를 마주하게 됩니다. Windows 탐색기에서 파일을 삭제하려고 하는데 "지정된 파일을 찾을 수 없다"며 오류를 뿜으며 삭제가 되지 않는 상황이죠. 자주 있는 일이라 명령 프롬프트를 열어 직접 삭제를 시도하면 대개 해결됩니다. 그런데 이번에는 새로운 난관에 부딪혔습니다. 익숙한 삭제 명령조차 완료되지 않고, 명령 프롬프트는 "지정된 파일을 찾을 수 없습니다(The system cannot find the file specified)"라는 메시지만 반복할 뿐이었습니다.
이 문제는 Samba 공유 폴더에서 Xerox B215 프린터가 생성한 잠금(lock) 파일에서 발생했습니다. 이유를 알 수 없게도 프린터가 실제 파일 이름을 잘라버려서 "Xerox_Scan.pdf"가 아닌 "Xerox_Scan."이라는 이름으로 저장된 것이었습니다. 그런데 과연 이름이 정말 그것만으로 끝이었을까요?
문제 상황
명령 프롬프트에서 실행하면 다음과 같은 결과가 나타납니다.
del "Xerox_Scan."
지정된 파일을 찾을 수 없습니다.
이 시점에서 파일 이름 끝에 Windows 탐색기나 명령 프롬프트에서는 보이지 않는 이상한 문자가 붙어 있다는 사실을 깨달았습니다. 사실 이 상황은 예전에 동료들과 함께 후배들을 위한 시스템 관리 시험에서 활용하던 장난기 섞인 트릭을 떠올리게 했습니다. DOS 시절의 Alt + 255 트릭처럼 파일 이름 끝에 특수 문자를 삽입해 파일을 만든 뒤, 누가 원인을 알아내는지 지켜보던 것이죠. 참고로 Linux 환경에서는 8진수 덤프 유틸리티(od)를 사용하면 눈에 보이지 않는 문자까지 전부 확인할 수 있습니다.
해결 방법
Windows에서는 탐욕적(greedy) 검색, 더 정확히는 탐욕적 삭제를 활용하면 됩니다. 여기서 어떤 원리로 작동하는지 궁금하다면 정규 표현식을 떠올려 보세요. 지정된 경로와 그 하위 디렉터리까지(/s 옵션) 파일을 검색하고, 이름 끝에 0개 이상의 공백 문자가 붙어 있는 파일을 찾아 삭제하는 방식입니다. 단 한 번의 실행으로 문제가 깔끔하게 해결됩니다.
del /s \\?\D:\Scans\Xerox_Scan."
Deleted file - \\?\D:\Scans\Xerox_Scan.
마무리
기술적인 관점에서 볼 때 삭제되지 않는 파일 하나가 치명적인 문제는 아닙니다. 하지만 미관상으로도, 그리고 어쩐지 신경이 거슬리는 의미로도 분명 문제이며, 이론적으로는 이런 파일을 우아하게 무시하도록 설계되지 않은 백업 스크립트나 예약된 작업(scheduled task)에 장애를 일으킬 가능성도 있습니다. 따라서 가벼운 유지보수 차원에서라도 제때 정리해 두는 것이 좋습니다.
물론 다른 방법도 여럿 존재합니다. 예를 들어 Process Explorer로 파일을 검색한 뒤 삭제할 수도 있으며, 공백 문자가 포함된 파일도 문제없이 처리됩니다. 하지만 저는 명령줄에서 정규식 패턴을 활용한 이 간단한 삭제 방식이 가장 우아한 해결책이라고 생각합니다. 어쨌든 성가신 작업이었지만, 다행히 빠르고 간편한 해결법이 있었네요. 그럼 다음에 또 유용한 팁으로 찾아오겠습니다.
감사합니다.