ฉันกำลังทำงานกับระบบที่เก็บสิ่งที่คล้ายกับแผนผังไอโหนดของระบบไฟล์ มีคำสั่งที่เทียบเท่ากับ ls
อยู่แล้ว แต่ยังไม่รองรับตัวเลือกแบบเรียกซ้ำ ฉันกำลังตรวจสอบตัวเลือกการใช้งานเพื่อเพิ่มตัวเลือกแบบเรียกซ้ำ ฉันต้องการเพิ่มความคุ้นเคยให้สูงสุดสำหรับผู้ใช้ที่รู้จัก POSIX ls
และเพิ่มความสามารถในการพกพาสำหรับสคริปต์ใด ๆ ที่เขียนขึ้นเพื่อใช้เอาต์พุตของ POSIX ls -R
ดูเหมือนว่า ls -R
สามารถนำไปใช้กับการแวะผ่านเชิงลึกก่อนหรือทางกว้างก่อนก็ได้ อย่างไรก็ตาม ฉันไม่สามารถหาคำตอบที่แน่ชัดได้ว่าลำดับการแวะผ่านนั้นถูกกำหนดโดยข้อกำหนดเฉพาะ หรือปล่อยให้เป็นตัวเลือกการใช้งานหรือไม่
ในเอกสารประกอบ POSIX สำหรับ ls
ฉันไม่พบคำตอบที่เฉพาะเจาะจง นี่เป็นคำสั่งเดียวที่ฉันพบได้ที่เกี่ยวข้องกับการใช้งานการเรียกซ้ำ:
การนำไปใช้งานคาดว่าจะสำรวจความลึกโดยพลการเมื่อประมวลผลตัวเลือก -R ข้อจำกัดด้านความลึกเพียงอย่างเดียวควรขึ้นอยู่กับพื้นที่จัดเก็บจริงไม่เพียงพอสำหรับการติดตามไดเร็กทอรีที่ไม่ถูกสำรวจ
ฉันยังได้ลองตรวจสอบเอกสารสำหรับ nftw
ด้วย ฉันไม่พบคำสั่งเจาะจงเกี่ยวกับลำดับการแวะผ่านที่นั่นอีกครั้ง
สำหรับการวัดเชิงประจักษ์ ฉันได้รันการทดสอบบนกล่อง CentOS และพฤติกรรมดังกล่าวเป็นการแวะผ่านเชิงลึกก่อนอย่างชัดเจน
> uname -a
Linux centos 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
> yum info coreutils
Loaded plugins: fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Loading mirror speeds from cached hostfile
* base: mirror.pac-12.org
* elrepo: ftp.osuosl.org
* epel: linux.mirrors.es.net
* extras: repos.lax.quadranet.com
* updates: ftp.osuosl.org
Installed Packages
Name : coreutils
Arch : x86_64
Version : 8.22
Release : 11.el7
Size : 14 M
Repo : installed
From repo : anaconda
Summary : A set of basic GNU tools commonly used in shell scripts
URL : http://www.gnu.org/software/coreutils/
License : GPLv3+
Description : These are the GNU core utilities. This package is the combination of
: the old GNU fileutils, sh-utils, and textutils packages.
> tree testTraversal/
testTraversal/
├── dir1
│ └── dir8
│ └── dir9
│ └── dir10
├── dir2
│ ├── dir4
│ │ └── dir5
│ ├── dir6
│ ├── file1
│ └── file2
├── dir3
└── dir4
└── dir5
└── dir6
└── dir7
├── file3
├── file4
└── file5
> ls -R testTraversal/
testTraversal/:
dir1/ dir2/ dir3/ dir4/
testTraversal/dir1:
dir8/
testTraversal/dir1/dir8:
dir9/
testTraversal/dir1/dir8/dir9:
dir10/
testTraversal/dir1/dir8/dir9/dir10:
testTraversal/dir2:
dir4/ dir6/ file1 file2
testTraversal/dir2/dir4:
dir5/
testTraversal/dir2/dir4/dir5:
testTraversal/dir2/dir6:
testTraversal/dir3:
testTraversal/dir4:
dir5/
testTraversal/dir4/dir5:
dir6/
testTraversal/dir4/dir5/dir6:
dir7/
testTraversal/dir4/dir5/dir6/dir7:
file3 file4 file5
ฉันไม่รู้ว่านี่เป็นพฤติกรรมที่กำหนดโดยข้อมูลจำเพาะหรือเพียงรายละเอียดการใช้งานของ GNU coreutils
ข้อสังเกตของฉันคือโครงสร้างไดเร็กทอรีในระบบไฟล์มีแนวโน้มที่จะกว้างกว่าความลึก นั่นจะบ่งชี้ว่าโดยทั่วไปแล้วการเน้นความลึกเป็นหลักเป็นตัวเลือกการใช้งานหน่วยความจำที่มีประสิทธิภาพมากกว่า แม้ว่าจะเป็นไปได้ที่จะคิดตัวอย่างที่ขัดแย้งกัน โดยที่การใช้ความกว้างเป็นหลักจะมีประสิทธิภาพหน่วยความจำมากกว่า
ลำดับการแวะผ่านกำหนดไว้ที่ใดในข้อกำหนดหรือไม่ ถ้าไม่เช่นนั้น การข้ามผ่านเชิงลึกก่อนนั้นใช้กันอย่างแพร่หลายในการนำไปใช้งาน และดังนั้นจึงเป็นสมมติฐานที่ปลอดภัยกว่าการแวะผ่านแนวกว้างก่อน
nftw()
มีแฟล็กFTW_DEPTH
- person gavv   schedule 12.01.2016