我可以在 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在目录树中的每个目录中分叉一个进程,并让(至少其中一些)并行运行。但我不知道您正在处理多少个目录,因此我无法确定这是否是净收益。

相关内容