Windows NTFS 파일 시스템에는 파일이 있습니다 (예 🙂 orig.mp3
. 이 경로를 통해이 파일 orig.mp3
을 사용중인 방식으로 (예 : VLC에서 재생하여) 이 파일을 엽니 다 .
그런 다음 하드 링크 ( cmd /c mklink /h link.mp3 orig.mp3
)를 만듭니다 . 결과적으로 두 개의 NTFS 경로가 정확히 동일한 파일을 가리 킵니다.
마지막으로 링크 된 파일을 다시 삭제하려고합니다 ( del link.mp3
, 또는 Windows 탐색기에서 삭제).
“다른 프로세스에서 파일을 사용 중이기 때문에 프로세스가 파일에 액세스 할 수 없습니다.”
왜? 더 중요한 것은 : 프로세스가 원본 파일을 사용하지 않는 것을 제외하고 어떻게 피할 수 있습니까? 원본을 더 이상 사용하지 않을 때 연결된 파일이 자동으로 삭제되도록 Windows에 ‘지연된 삭제’를 수행하도록 지시 할 수 있습니까?
답변
이것은 꽤 예상되는 동작입니다. 하드 링크는 동일한 파일의 다른 이름 일뿐입니다. 예를 들어, A.PDF 파일이있는 경우 동일한 파일에 대한 하드 링크 B.PDF를 작성하면 파일이 A.PDF 또는 B.PDF라는 이름으로 열리 든 상관 없습니다. 여전히 동일한 파일이므로 이 파일은 단순히 열리므로 링크를 삭제할 수 없습니다.
실제 이유는 이름이 마스터 파일 테이블 (NTFS의 경우)의 파일 레코드에 속성으로 저장되고 파일이 열리기 때문에 링크를 삭제할 수 없습니다 (열린 파일을 수정할 수 없음).
이 경우 원본 파일과 같은 것은 없습니다. 두 이름이 모두 같은 파일에 속해 있고 두 이름이 모두 같기 때문입니다. 링크 카운트가 0이되면 파일이 실제로 삭제됩니다.
답변
FSUTIL 도구를 사용하여 심볼릭 링크를 안전하게 유지하십시오.
http://technet.microsoft.com/en-ca/library/cc753059.aspx
fsutil reparsepoint delete link.mp3
orig.mp3 를 유지하는 동안 하드 링크를 제거합니다
답변
Robert Goldwein의 답변 에서 자세히 설명한 것처럼 파일을 사용하는 동안 이러한 하드 링크를 삭제할 수 없습니다. 그러나 지연된 삭제가 가능합니다.
이 질문에 대한 Damon 의 의견 은 Sysinternals Suite의 이동 파일 을 사용하도록 제안합니다 .
필자의 경우 PowerShell 에서이 작업을 수행하려는 경우 Lee Holmes ‘s를 사용 하여 다음 부팅시 Windows가 파일을 삭제하도록 할 수 있습니다.Move-LockedFile
link.mp3 $null
위의 두 가지 모두 MOVEFILE_DELAY_UNTIL_REBOOT 플래그 와 함께 Win32 MoveFileEx 함수를 사용합니다 .
업데이트 : 방금 해킹 한 내용은 https://gist.github.com/marnix/7565364 를 참조 하십시오Remove-File-Eventually
. 보장하지 않습니다. 🙂