POSIX ls -R กำหนดลำดับการแวะผ่านเฉพาะหรือไม่ ถ้าไม่เช่นนั้น สมมติฐานใดมีแนวโน้มที่จะเคลื่อนย้ายได้ง่ายกว่า: เชิงลึกมาก่อนหรือกว้างก่อน?

ฉันกำลังทำงานกับระบบที่เก็บสิ่งที่คล้ายกับแผนผังไอโหนดของระบบไฟล์ มีคำสั่งที่เทียบเท่ากับ 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

ข้อสังเกตของฉันคือโครงสร้างไดเร็กทอรีในระบบไฟล์มีแนวโน้มที่จะกว้างกว่าความลึก นั่นจะบ่งชี้ว่าโดยทั่วไปแล้วการเน้นความลึกเป็นหลักเป็นตัวเลือกการใช้งานหน่วยความจำที่มีประสิทธิภาพมากกว่า แม้ว่าจะเป็นไปได้ที่จะคิดตัวอย่างที่ขัดแย้งกัน โดยที่การใช้ความกว้างเป็นหลักจะมีประสิทธิภาพหน่วยความจำมากกว่า

ลำดับการแวะผ่านกำหนดไว้ที่ใดในข้อกำหนดหรือไม่ ถ้าไม่เช่นนั้น การข้ามผ่านเชิงลึกก่อนนั้นใช้กันอย่างแพร่หลายในการนำไปใช้งาน และดังนั้นจึงเป็นสมมติฐานที่ปลอดภัยกว่าการแวะผ่านแนวกว้างก่อน


person Chris Nauroth    schedule 11.01.2016    source แหล่งที่มา
comment
nftw() มีแฟล็ก FTW_DEPTH   -  person gavv    schedule 12.01.2016


คำตอบ (1)


coreutils จะต้องอยู่ในเชิงลึกก่อน busybox อยู่ที่ความลึกก่อน BSD/OS X เน้นความลึกก่อน (ทดลอง ต้นฉบับไม่สามารถอ่านได้) ฉันคาดหวังว่าการใช้งานส่วนใหญ่จะเป็นแบบเชิงลึกก่อน เพราะมันง่ายที่จะทำแบบวนซ้ำ และเนื่องจากการจำกัด POSIX บนความยาวพาธจะจำกัดการใช้หน่วยความจำ/สแต็กของการสำรวจเชิงลึกครั้งแรกที่ค่อนข้างแน่น

person David Eisenstat    schedule 12.01.2016
comment
ขอบคุณสำหรับการตอบกลับ. ณ จุดนี้ ดูเหมือนไม่น่าเป็นไปได้ที่เราจะพบจุดในข้อมูลจำเพาะที่บอกโดยตรงว่าต้องเน้นเชิงลึกเป็นอันดับแรก แต่ข้อโต้แย้งที่ว่ามันเป็นตัวเลือกที่ใช้งานได้จริงก็สมเหตุสมผล ฉันจะยอมรับคำตอบนี้ - person Chris Nauroth; 01.02.2016