![Perl의 unix find 명령에서 목록을 사용하여 연결을 해제할 수 있습니까?](https://linux55.com/image/113034/Perl%EC%9D%98%20unix%20find%20%EB%AA%85%EB%A0%B9%EC%97%90%EC%84%9C%20%EB%AA%A9%EB%A1%9D%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%97%B0%EA%B2%B0%EC%9D%84%20%ED%95%B4%EC%A0%9C%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
여러 서버에서 수천 개의 파일을 삭제해 보세요.
rm
작동하지 않습니다. 주기적으로 삭제를 실행
하는 일반 스크립트를 작성했습니다 cron
.
...
/bin/perl -e 'unlink ( <`find ${DIRECTORY} -name "*.${FILETYPE}" -type f -mtime +${DELETE_OLDER_THAN}`> ) or die "Nothing deleted\n" ' >> ${REMOVAL_LOGFILE} 2>&1
...
나는 무엇을 제거하고 싶은지에 대해 매우 구체적으로 말하고 싶습니다. 이 경우 허용되는 :/
보다 더 나은 것 같아서 Perl을 사용하고 있습니까 ?-exec rm {}
find
답변1
find
해당 작업을 지원 하면 -delete
여러 삭제 프로세스를 생성하지 않고도 가능한 한 빠른 속도를 얻을 수 있습니다.
find "$DIRECTORY" -name "*.$FILETYPE" -type f -mtime +"$DELETE_OLDER_THAN" \
-delete -print >> "$REMOVAL_LOGFILE" 2>&1
-exec rm {} \;
각 삭제 작업에 대해 새 프로세스를 생성하므로 속도가 느려질 수 있습니다 . 많은 수의 파일에 대한 프로세스를 생성 하므로 find
가지고 있으면 더 -exec rm {} +
빠릅니다 . rm
그러나 모든 단일 스레드 솔루션 중 가장 빠른 것은 -delete
.
좀 더 복잡하다면 find .. -delete
디렉터리 트리의 각 디렉터리에서 프로세스를 분기하고 (적어도 일부는) 병렬로 실행되도록 할 수 있습니다. 하지만 나는 당신이 얼마나 많은 디렉토리를 다루고 있는지 모르기 때문에 이것이 순이익인지는 알 수 없습니다.