在Linux上使用Java从Windows计算机删除数百万个文件

在Linux上使用Java从Windows计算机删除数百万个文件,java,unix,Java,Unix,我有一个在Linux机器上运行的Java程序,它需要在Windows机器上删除目录中的数百万个文件。并非所有的文件都需要删除——只有名称中有“xxx”的文件需要删除 我使用SambaAPI从UNIX连接到Windows,并启动了delete命令。它运行正常,但删除数百万个文件需要12个小时 我可以更快地删除文件吗?任何来自Java的UNIX脚本?您不需要Java程序来删除目录中的文件。 我只需在Windows文件夹中运行下面的命令(或批量上载) 可以使用与以下类似的shell命令来执行此操作:

我有一个在Linux机器上运行的Java程序,它需要在Windows机器上删除目录中的数百万个文件。并非所有的文件都需要删除——只有名称中有“xxx”的文件需要删除

我使用SambaAPI从UNIX连接到Windows,并启动了delete命令。它运行正常,但删除数百万个文件需要12个小时


我可以更快地删除文件吗?任何来自Java的UNIX脚本?

您不需要Java程序来删除目录中的文件。 我只需在Windows文件夹中运行下面的命令(或批量上载)


可以使用与以下类似的shell命令来执行此操作:

find /path/to/windows/dir -type f -name '*xxx*' -print0 | xargs -0 rm -f
如果需要通过Java执行此操作,则可以使用Java的类调用上述命令:


添加一些代码将非常有用!!!!为什么不创建一个批处理脚本并运行它呢?如果您在Linux机器上有一个程序需要通过Samba连接删除文件,那么瓶颈可能是您的网络连接。在unix脚本文件中执行此操作不太可能改善情况。您能再解释一下这种情况吗?为什么不直接从Windows计算机上删除这些文件?为什么使用Java而不是简单的windows BAT文件或Linux脚本?如果只是用xxx删除文件,为什么不使用文件名模式呢?简言之,您为什么拒绝这些简单的解决方案?您是否发出了数百万个删除命令或一个用于删除
*xxx*
的命令?可以从Linux命令行删除Windows上的文件吗?Windows上的Powershell/taskmanager或Java组合是一个选项吗?您需要将
-print0
添加到
find
中,并将
-0
添加到
xargs
中,以防止文件名中出现空格之类的内容。这一点很好。我更新了答案以纳入您的建议。谢谢@ErikGillespie,我将尝试此选项,并很快让您知道结果。Java程序是一个按计划从ESP调用的spring批处理程序。在删除文件之前,有许多规则可以标识文件名中有“xxx”。我可以尝试创建包含上述命令的.Bat文件,使用samba移动到windows目录,然后执行,请建议。要从Java启动bacth文件,请访问以下建议的解决方案:1。在Linux上创建一个批处理文件,其中包含要删除的文件名列表和删除它们的命令。2.使用SAMBA 3将此文件上载到Windows目录。执行批处理文件(并将删除的内容记录到日志文件)4。使用SAMBA删除批处理文件以进行清理。谢谢@max,我将尝试一下
find /path/to/windows/dir -type f -name '*xxx*' -print0 | xargs -0 rm -f
Runtime.getRuntime().exec("find /path/to/windows/dir -type f -name '*xxx*' -print0 | xargs -0 rm -f");