매우 효율적이지는 않지만 다음을 수행 할 수 있습니다.
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 모드 lI 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) 파일의 이름을 바꿀 수 있어야합니다 ( ).