คุณบอกว่า " lsไปที่หัวใช้เวลานานมากในการทำให้เสร็จ"
สาเหตุของสิ่งนี้ไม่ใช่ls
แต่จำนวนไฟล์ในไดเรกทอรีของคุณ หากคุณมี 100,000 ไฟล์ในไดเรกทอรีเดียววิธีใด ๆ ในการแก้ไขปัญหานี้จะต้องได้รับข้อมูลเกี่ยวกับ 100,000 ไฟล์ทั้งหมดก่อนที่จะนึกถึงการเรียงลำดับหรือพิมพ์ผลลัพธ์ใด ๆ
หากใช้เวลานานเกินไปทางออกที่แท้จริงคือการแบ่งไฟล์ไปยังหลายไดเรกทอรี
หากคุณไม่สามารถแพร่กระจายไฟล์ในช่วงหลายไดเรกทอรีจะมีวิธีใด ๆ ที่คุณสามารถแคบลงจำนวนไฟล์ที่จะต้องพิจารณา ? เช่นถ้าชื่อไฟล์มีวันที่บางทีคุณอาจรวมไวลด์การ์ดไว้เพื่อให้ระบบไม่ต้องเรียงลำดับ 100,000 ไฟล์ หรืออาจเป็นตัวเลขที่เรียงตามลำดับ (สิ่งนี้อาจช่วยได้หรืออาจจะไม่ช่วย แต่ก็คุ้มค่าที่จะลอง)
คุณพยายามทำเช่นนี้กี่ครั้ง อาจคุ้มค่าที่จะบันทึก / แคชเอาต์พุตเพื่อนำกลับมาใช้ใหม่
ตอนนี้คำถาม
คุณแน่ใจว่าคุณหมายถึง "เวลาที่สร้าง" และไม่ "เวลาเปลี่ยน" ? เครื่องมือส่วนใหญ่สามารถแสดง "เปลี่ยนเวลา" เท่านั้นไม่ใช่ "เวลาสร้าง"
การได้รับ "เวลาสร้าง" เป็นสิ่งใหม่มากซึ่งต้องใช้ระบบไฟล์ ext4 และเครื่องมือบางอย่างที่ไม่สามารถติดตั้งได้ง่าย
หากคุณต้องการเปลี่ยนเวลา
เปลี่ยนเวลา (ctime สำหรับระยะสั้น) หมายถึงเวลาที่แอตทริบิวต์ของไฟล์เปลี่ยนแปลงล่าสุด
ls -c
เรียงตามเวลา
คุณต้องการผลลัพธ์ในลำดับมากไปน้อยไม่ใช่จากมากไปน้อยดังนั้นคุณต้องสลับเอาท์พุทด้วย-r
ตัวเลือกด้วย
ดังนั้นคุณสามารถทำเช่นนี้:
ls -cr | head -n 100
ทางออกที่ยาวกว่าสำหรับปัญหาเดียวกันโดยใช้stat
:
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%Z\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
แต่มันจะช้ากว่าls -cr
ระบบของฉัน
หากคุณต้องการปรับเปลี่ยนเวลา
เวลาแก้ไข (mtime สำหรับระยะสั้น) หมายถึงเวลาที่เนื้อหาของไฟล์เปลี่ยนแปลงล่าสุด
ls -t
เรียงลำดับตาม mtime
เปลี่ยนls -cr
ไปls -tr
(ตัวเลือกที่ดีที่สุด) หรือการเปลี่ยนแปลงไปstat -c $'%Z\t%n'
stat -c $'%Y\t%n'
หากคุณต้องการเวลาในการสร้าง
(crtime สำหรับระยะสั้น)
มันยากกว่านี้
ext4
ขั้นแรกให้แน่ใจว่าไดเรกทอรีที่อยู่บนระบบไฟล์ที่มีรูปแบบการใช้ คุณสามารถใช้tune2fs -l <device name>
เพื่อตรวจสอบสิ่งนี้
จากนั้นมีstat
รูปแบบใหม่ที่เรียกว่า%W
ซึ่งสามารถช่วยคุณได้ที่นี่ ในการรับมันคุณจะต้องดาวน์โหลดGNU Coreutilsรุ่นที่วางจำหน่ายในเดือนตุลาคม 2010 หรือหลังจากนั้นให้แยกรวบรวมและติดตั้ง
จากนั้นขึ้นอยู่กับเคอร์เนลของคุณสิ่งนี้อาจใช้ได้ (ยังไม่ได้ลอง)
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%W\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
ดูสิ่งนี้ด้วย:
หากคุณได้รับข้อผิดพลาดเกี่ยวกับ "'$\t'
'$\t'
สัญกรณ์ต้องbash
หรือzsh
มันจะไม่ทำงานในdash
หรือsh
บน Ubuntu ถ้าคุณต้องการจริงๆที่จะใช้เปลือกหอยเหล่านั้นคุณจะต้องเปลี่ยนใด ๆ\t
ที่จะCtrl+ V, Tabและลบชั้นนำ$
จากก่อนอ้างเปิด
find -mtime +<number of days> -delete
การล้างไฟล์ทั้งหมดที่เก่ากว่าอายุที่กำหนด นั่นหมายความว่าไม่จำเป็นต้องมีการจัดเรียง