2011-09-11 264 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。