매우 효율적이지는 않지만 다음을 수행 할 수 있습니다.
find /folder/downloading -type f -exec sh -c '
for file do
lsof -F a "$file" | grep -q w || mv "$file" /folder/downloaded
done' sh {} +
즉, 파일이 나열되지 않았는지 확인이다 w
의식 a
에서 CCESS 모드 l
I s
의 t o
펜 f
전에 세틸 m
오 v
보내고.
psmisc
의 구현 fuser
일반적으로 리눅스 기반의 운영 체제에서 발견는이 -w
와 기능 (파일을 쓰기 위해 열을 확인하기 위해)하지만 불행히도 그것은 단지 일 -k
해당 프로세스를 종료 할 수 있습니다. 그러나 아무것도하지 않는 의사 신호 0을 사용하여 여전히 사용할 수있는 것 같습니다.
find /folder/downloading -type f -exec sh -c '
for file do
fuser -s -w -k -0 "$file" || mv "$file" /folder/downloaded
done' sh {} +
이동을 방해하는 프로세스가 무엇인지 확인하려면을 제거하십시오 -s
(또는으로 교체 -v
).
해당 명령을 수퍼 유저로 실행하지 않으면 프로세스에 대한 정보 만 얻을 수 있습니다. 파일을 다운로드하는 프로세스가 다른 사용자로 실행중인 경우 탐지되지 않은 상태로 유지됩니다.
또한 파일을 다른 파일 시스템으로 이동하지 않는 한 파일을 이동해도 현재 파일에 기록중인 프로세스가 파일에 대한 쓰기를 마치는 것을 막을 수는 없습니다.
그들이 쓰기를 마친 후, 파일이 더 이상 그러나 그들은 나중에 할 수 있도록 설계했습니다 무엇 따라, 그들은 혼동되지 않을 수있다 (예를 들어 그들은 그것을 다운로드 후 파일의 일부 속성을 변경하고 싶은 경우 그렇게 하지 파일 설명자를 통해 ( chmod()
vs fchmod()
와 같거나 utimes()
파일 설명자를 통해 수행 할 수 없음).
%.part
한 다음 %로 이름 바꾸기) 그런 다음 다운로더가 제대로 작동하면 (이상한 일이 없으면mv
) 파일의 이름을 바꿀 수 있어야합니다 ( ).