目录递归

4
如果需要递归遍历目录树,有两种方法可以做到:
1.随着遍历的进行,逐渐增加路径长度,例如…/…/…
2.使用chdir进入每个目录,因此您永远不会处理超过两个组件的路径名。
第一种方法更明显,并且可能更能够抵御不良事件,例如在中途卸载某些内容。另一方面,查看GNU find实用程序的代码时,我注意到它使用第二种方法。这是为什么?第二种方法有任何我没有考虑的优势吗?
3个回答

3

有趣!在实践中它有多可移植? - rwallace
1
根据你的实践而定;它是一个源自BSD的API。它在Linux上无处不在;Solars 有它;AIX 在libc.a中有它... 我认为它非常普遍。我不知道可能存在的差异。 - sehe
而http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/ftw.3.html表示Mac OS有它;但声称新代码应改用fts? - rwallace

2

我认为find使用第二种方法,因为你可以在执行命令时随时执行(使用exec选项)


2

方法2可以无缝处理路径中组件被重命名的情况。

同时,它会阻止任何人在搜索过程中卸载目录;如果目录正在使用中(包括作为某些进程的当前工作目录),内核将拒绝卸载该目录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接