如果我正在扫描一棵大树并希望在扫描整个树之前将结果传递给另一个命令,那么 ;选项执行此操作?从我的阅读来看,似乎是这样,但我想确定没有后台缓存。如果有后台缓存,我想知道,这样我就可以使用 for 循环。
当对几个文件运行 find 时,光盘不会出现延迟或压力。对于经常运行且处理一长串文件的脚本,find 将完整列表传递给下一个命令可能需要几分钟的时间。我希望 find 一次只在一个文件上运行,并且在前一个 -exec 完成之前不要搜索目标。
答案1
你似乎是在问是否
find -exec some_command '{}' \;
将为每个文件按顺序执行一次,执行some_command
时不会在后台执行任何其他操作。some_command
确实这是真的。
但是,您似乎也认为这会减少硬盘驱动器的磨损。情况可能并非如此——多次启动和停止 I/O 需要比一次读取大量数据更多的机械运动,因此可能会导致(非常稍微)传统旋转硬盘的磨损更多。
答案2
您可以尝试一些不同的方法并使用命名管道:如何将管道作为持久进程启动
基本上:
- 创建命名管道
- 启动您想要在 find 的 -exec 参数中使用的进程,并从管道中读取它。
- 启动查找进程并将结果写入管道
- 从您的过程中,您可以控制并停止查找,如果您达到的结果意味着您不需要列出其余文件。