ค้นหาคำสั่งการเรียงลำดับเริ่มต้น


30

ลำดับการเรียงเริ่มต้นสำหรับรายการที่ส่งคืนโดยคำสั่ง linux find คืออะไร

ตัวอย่างเช่นถ้าฉันออก

find . -type f -name '*mp3' 

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

บางครั้งมันกลับมา:

./B/01.mp3
./A/01.mp3
./A/04.mp3
./A/02.mp3

ดูว่าเนื้อหาของสารบบ B อยู่ในรายการเป็นลำดับแรกอย่างไรจากนั้นในไดเรกทอรี A ในเวลาเดียวกันภายในไดเรกทอรี A ไฟล์จะถูกแสดงตามลำดับที่ตลก


จากประสบการณ์ดูเหมือนว่าจะสอดคล้องกันต่อการติดตั้งคือ หากคุณมีไฟล์ชุดเดียวกันในสองเครื่องมันจะส่งคืนหนึ่งคำสั่งซื้อในเครื่องหนึ่งและจะแตกต่างกันโดยสิ้นเชิง ฉันสงสัยว่าทำไมก่อนหน้านี้ +1 +1
James L

1
ฉันมีเครื่องส่งสัญญาณ FM ในรถของฉันและมันมักจะเล่นเพลงจากแฟลชการ์ดของฉันในลำดับที่แปลก ฉันไม่เคยคิดมาก่อน แต่ฉันก็จำได้ว่ามันเป็นคำสั่งเดียวกันกับที่คำสั่งด้านบนส่งคืนเอาต์พุตของมัน
Nasko

BTW: BSD find มี-sพารามิเตอร์สำหรับเรียงลำดับตัวอักษรตามลำดับ
lapo

คำตอบ:


19

findจะสำรวจแผนผังไดเรกทอรีในรายการคำสั่งซื้อจะถูกเก็บไว้ในรายการไดเรกทอรี นี้จะ (ส่วนใหญ่) จะสอดคล้องจากการเรียกใช้เพื่อทำงานบนเครื่องเดียวกันและเป็นหลักจะเป็น "ลำดับการสร้างไฟล์ / ไดเรกทอรี" ถ้าไม่มีการลบ

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


ขอบคุณสำหรับคำตอบโดยละเอียดของคุณ! ดังนั้นหากเครื่องส่งสัญญาณ FM ของฉัน (ดูความคิดเห็นก่อนหน้านี้ของฉัน) เล่นแทร็กตามลำดับคำสั่ง find จะแสดงรายการพวกเขาฉันไม่สามารถควบคุมได้ตามลำดับที่ฉันต้องการให้เล่น
Nasko

แฟลชการ์ดอาจใช้ระบบไฟล์ FAT และถ้าฉันจำได้ถูกต้องการจัดการลำดับของรายการ FAT นั้นค่อนข้างง่ายด้วยตัวดีบั๊กระบบไฟล์ อาจเป็นไปได้ว่าควรคัดลอกเพลงจากแฟลชปัจจุบันไปยังแฟลชใหม่ตามลำดับที่คุณต้องการให้เล่นซึ่งอาจง่ายกว่า
Vatine

หนึ่งในแอปพลิเคชั่นที่มีประโยชน์ของความสอดคล้องดังกล่าวคือการประมาณความคืบหน้าของการfind /path/ -exec ...ทำงานช้าโดยทำงานเร็วกว่ามากfind /path/เพื่อให้ได้รายชื่อไฟล์ที่เรียงลำดับก่อน
Andrey


2

ฉันทำงานใน UNIX / Linux ตั้งแต่ปี 1984/1991 ตามลำดับและคำสั่งแรกที่ฉันสอนถูกค้นพบ Linux / GNU ได้ใส่ทุกอย่างที่คุณต้องการลงในคำสั่ง find ในปัจจุบันแล้วลองเล่นดู

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

  1. หากคุณใช้ -ls และต้องการเรียงลำดับตามชื่อไฟล์เขตข้อมูลที่ 11 เป็นชื่อไฟล์เพื่อให้คุณสามารถทำสิ่งต่อไปนี้ ตัวเลือกการเรียงลำดับ -k สามารถใช้หลายฟิลด์ในการเรียงลำดับเช่นกัน

    find / path -ls | เรียงลำดับ -k11

  2. หากคุณต้องการควบคุมธัญพืชที่ละเอียดกว่าเรียงตามวันที่ / เวลาในลำดับจากน้อยไปมากหรือมากไปหาน้อยให้ใช้ตัวเลือก -printf "" ดูคู่มือสำหรับรายละเอียดเพิ่มเติม แต่ต่อไปนี้เป็นตัวอย่างที่จะพิมพ์ด้วยเสี้ยววินาทีเพื่อให้แม่นยำมาก

วันตัวอย่าง / เวลา: 2016-09-17 + 12: 09: 57.9013929800

find /path -printf "%T+ %p\n" | sort -n # Ascending

find /path -printf "%T+ %p\n" | sort -nr # Descending

อีกวิธีในการทำเช่นนี้โดยไม่มีตัวอักษรในสตริงวันที่ / เวลาคือ

วันตัวอย่าง / เวลา: 20160917120013.8101685040

find /path -printf "%AY%Am%Ad%AH%AM%AS %p\n" | sort -n
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.