Perl의 unix find 명령에서 목록을 사용하여 연결을 해제할 수 있습니까?

Perl의 unix find 명령에서 목록을 사용하여 연결을 해제할 수 있습니까?

여러 서버에서 수천 개의 파일을 삭제해 보세요.
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디렉터리 트리의 각 디렉터리에서 프로세스를 분기하고 (적어도 일부는) 병렬로 실행되도록 할 수 있습니다. 하지만 나는 당신이 얼마나 많은 디렉토리를 다루고 있는지 모르기 때문에 이것이 순이익인지는 알 수 없습니다.

관련 정보