여러 파일을 폴더에 다운로드하여 downloading
여러 파일을 폴더에 다운로드했습니다.HTTPie. bash 스크립트는 다운로드한 파일을 처리하도록 설계되어 있으므로 아래와 같이 다운로드한 파일을 다른 폴더에 복사해 보았습니다.
find /folder/downloading -type f -exec mv '{}' /folder/downloaded \;
그러나 이는 완료되지 않은 파일도 복사합니다. -mmin +5
명령을 추가하여 오래된 파일의 전송을 제한 해 보았습니다 . 파일을 쓰고 있는 상태로 두고 다운로드한 파일만 전송하는 유효한 명령은 무엇입니까?
답변1
그다지 효율적이지는 않지만 다음과 같이 할 수 있습니다.
find /folder/downloading -type f -exec sh -c '
for file do
lsof -F a "$file" | grep -q w || mv "$file" /folder/downloaded
done' sh {} +
즉 , 닫기 전에 파일의 i에 파일이 w
의식 액세스 모드 로 나열되어 있지 않은지 확인하십시오 .a
l
s
o
f
m
v
일반적으로 Linux 기반 운영 체제에서 발견되는 구현 psmisc
에는 기능(쓰기 위해 열려 있는 파일 확인)이 있지만 불행히도 해당 프로세스를 종료하는 데만 사용할 수 있습니다. 그러나 아무것도 하지 않는 가짜 신호 0을 사용하면 여전히 사용할 수 있는 것 같습니다.fuser
-w
-k
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()
파일 설명자를 통해 수행할 수 없음)