2011-09-11 219 views
4

如果需要递归遍历目录树,有两种方法可以做到这一点:目录递归

  1. 树立长度增加的路径名,当您去,.../.../..等等

  2. 使用chdir下到每个目录中,所以你永远不会处理比两个组件长的路径名。

第一种方法让我觉得更加明显,并且可能会更强大,以防止不必要的事件,例如某些事情在您中途停止时被卸载。另一方面,查看代码为GNU 找到实用程序,我注意到它使用第二种方法。这是有原因的吗?我没有想到的第二种方法的优点?

回答

3

呃...其实是一个现代的实现可能会使用

ftw是短期的文件树的步行路程

参见一个非常有用的资源:http://rosettacode.org/wiki/Walk_a_directory/Recursively#Library:_POSIX

+0

有趣!在实践中这种便携性如何? – rwallace

+1

取决于你的做法;它是一个BSD发起的API。它在Linux上无处不在; Solars [has it](http://book.chinaunix.net/special/ebook/addisonWesley/APUE2/0201433079/ch04lev1sec21.html#ch04ex08); AIX [在libc.a中有它(http://publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=%2Fcom.ibm.aix.basetechref%2Fdoc%2Fbasetrf1%2Fnftw.htm )...我认为这是非常普遍的。我不知道潜在的差异 – sehe

+0

和http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/ftw.3.html说Mac OS有它;但声称新代码应该使用fts代替? – rwallace

2

相信find使用方法2,你能,你去(与exec选项)

2

方法2无缝处理这样的路径中的组件被重命名的情况下执行命令。

它也拒绝任何人在搜索时卸载该目录;如果内核正在使用,内核将拒绝卸载该目录,其中包括某个进程的cwd。