어떤 프로세스에서도 사용되지 않는 파일을 찾아서 삭제하려면 어떻게 해야 하나요?

어떤 프로세스에서도 사용되지 않는 파일을 찾아서 삭제하려면 어떻게 해야 하나요?

~/.wine/drive_c/users/t/Temp/1.4G 바이트 파일이 있다는 것을 발견했습니다 *.tmp. 그 중 일부는 일부 프로세스(각 파일을 로 구별할 수 있음)에서 사용되고 있는 반면 lsof, 다른 일부는 어떤 프로세스에서도 사용되지 않습니다.

이 디렉토리의 파일은 Wine 클라이언트 프로세스에서 사용되는 정보를 임시로 저장합니까?

이 파일은 삭제해도 안전한가요?

와인 클라이언트 프로세스에서 사용하지 않는 파일만 삭제할 수 있는 경우 해당 파일을 자동으로 찾아 삭제할 수 있는 명령을 어떻게 작성합니까?

감사해요.

답변1

파일 삭제는 Wine에 의해 제어되지 않습니다. 유닉스에서는 열린 파일의 디렉토리 항목을 삭제할 수 있습니다. 파일은 해당 파일을 사용하는 프로세스가 파일을 닫을 때까지 남아 있습니다.

원하는 대로 수행하고 현재 열려 있지 않은 파일을 선택하여 원하는 대로 작업할 수 있습니다. 파일을 열고 닫는(그리고 생성 및 삭제도 가능) 보고 작업하는 것 사이의 경쟁입니다. 이러한 경합을 방지하는 것은 메인프레임 작업 입력 하위 시스템과 작업 제어 언어의 책임입니다. 그러나 "보통 가장 최근"이 현재 항목에 충분히 가까우면 모든 파일을 나열하고 열려 있는 모든 파일을 나열합니다. 두 번 나열되지 않은 파일은 볼 때 존재하지만 거의 동시에 거기에 있을 것입니다. 볼 때 열리지 않습니다(또는 볼 때 열려 있지만 거의 동시에 볼 때 거기에 있지 않으므로 여기서 먼저 lsof를 수행했습니다).

GNU/무엇이든,

sort -r <<EOD | uniq -u | while read; do test -f "$REPLY" && echo rm "${REPLY@Q}"; done
$( cd targetdir
   lsof -Fn +D $PWD | sed -n /^n/s/.//p
   find $PWD -printf %p\\n
)
EOD

삭제해도 안전해 보이는 파일을 삭제하는 명령 목록이 표시됩니다.

하지만 일반적으로 시작 시 임시 디렉터리를 지우고 최신 파일에 일부 보호 기능을 적용하면 됩니다.

find $TMPDIR -ctime +6 -delete

예를 들어, 최소 일주일 전에 만들어진 콘텐츠를 삭제하세요.

답변2

그리고 zsh:

echo rm -f ~/.wine/drive_c/users/t/Temp/*(D.^e['fuser -s $REPLY'])

(기쁠 때 제거 echo)

.파일( )(숨겨진 파일( D) 포함) 이 발견되지 않은 일반 파일()을 삭제합니다.fuser^사용자프로세스.

이 작업을 재귀적으로 수행하려면 *로 바꾸 **/*거나 다음을 사용할 수도 있습니다 find.

find ~/.wine/drive_c/users/t/Temp -type f ! -exec fuser -s {} \; \
   -exec echo rm -f {} +

(구현에서 지원하는 경우 로 바꾸십시오 -exec rm -f {} +.)-deletefind

관련 정보