วิธีการจัดลำดับไฟล์ใหม่ '03.mp3 01.mp3 02.mp3` (`ls -f`) ในไดเรกทอรีได้อย่างไร?


11

การสั่งซื้อทางกายภาพของไฟล์ที่สำคัญเมื่อผมคัดลอกลงติด USB ของฉันและฟังในรถเครื่องเล่น MP3 โฟลเดอร์อัลบั้มเพลงของฉันส่วนใหญ่จะไม่เรียงลำดับเช่นls -fอาจสร้าง:
03.song3.mp3
01.song1.mp3
02.song2.mp3

เมื่อตอนที่ผมคัดลอกโฟลเดอร์ที่ลงบน USB ติดของฉันไฟล์ที่ได้รับการคัดลอกในที่สั่งซื้อ เครื่องเล่น mp3 ในรถยนต์ของฉันแสดงไฟล์ตามลำดับที่ไม่เรียงกันซึ่งไม่ใช่สิ่งที่ฉันต้องการ ฉันสามารถจัดลำดับไฟล์ใน USB Stick ใหม่ได้ (ดู: วิธีจัดลำดับโฟลเดอร์ใหม่ได้อย่างไร (ดังแสดงใน `ls -U`) ) แต่สามารถหลีกเลี่ยงได้ทั้งหมดหากฉันสามารถเรียงลำดับไฟล์เหล่านั้นใหม่ภายในไดเรกทอรีนั้นบนฮาร์ดไดรฟ์ของฉัน (ext4 )? มีวิธีทำเช่นนั้นหรือไม่?

(หากไม่เป็นเช่นนั้นอาจมีวิธีเขียนfindคำสั่งที่รับไฟล์เรียงลำดับแล้วคัดลอกตามลำดับ ??) คำแนะนำใด ๆ


หรือคุณสามารถจัดเรียงไฟล์หลังจากคัดลอกไฟล์ไปยังเครื่องเล่น mp3: superuser.com/questions/368623/…
eswald

คำตอบ:


5

ไม่น่าเป็นไปได้ที่คุณจะสามารถทำได้ใน ext4 แตกต่างจาก FAT (32) ซึ่งใช้ตารางเชิงเส้นของไฟล์ในไดเรกทอรีระบบไฟล์ที่ทันสมัยใช้โครงสร้างที่ซับซ้อนเช่น B + tree (NTFS, XFS) หรือแฮช B-tree (ext3 / 4) ซึ่งรายการทั้งหมดจะถูกจัดเรียงตาม อัลกอริทึมเฉพาะ

โดยเฉพาะอย่างยิ่ง ext3 / 4 เรียงลำดับไฟล์ตามค่าแฮชของชื่อดังนั้นคุณจะได้รับไฟล์เดียวกันในลำดับเดียวกันเสมอ เป็นไปได้ที่จะปิดการใช้งานคุณสมบัติdir_indexผ่านทางtune2fsแต่อาจเสียค่าใช้จ่ายหากคุณมีไดเรกทอรีที่มีไฟล์จำนวนมาก


คำสั่งพื้นฐานสำหรับเรื่องนี้อาจเป็นcp dir/* otherdir/ที่ที่เชลล์เรียงลำดับชื่อเมื่อขยายอาร์กิวเมนต์และcpคัดลอกตามลำดับที่กำหนด

มีความซับซ้อนมากขึ้นสำหรับการคัดลอกไดเรกทอรีย่อย:

#!/usr/bin/env bash
srcdir=$1
destdir=$2

find "$srcdir" \( -type d -printf "0dir %P\0" \) \
            -o \( -type f -printf "1file %P\0" \) |
sort -z | while read -r -d '' type path; do
    case $type in
        "0dir") mkdir -vp "$destdir/$path";;
        "1file") cp -v "$srcdir/$path" "$destdir/$path";;
    esac
done

เป็นไปได้เช่นmoveไฟล์ที่จะพูดnew_tmpโฟลเดอร์แล้วย้ายพวกเขากลับ แต่สั่งการสั่ง? (ดูเหมือนว่าจะทำงานได้จากภายใน GUI สำหรับโฟลเดอร์?!)
ajo

1
@ajo: หากระบบไฟล์เปิดใช้งาน dir_index มันจะไม่ทำงาน โดยไม่คำนึงถึงลำดับที่คุณย้าย / สร้างไฟล์พวกเขาจะมีการเรียงลำดับเดียวกันตราบใดที่มีชื่อเดียวกัน ตัวอย่างเช่นลองmkdir test1 test2; touch test1/{a,b,c,d} test2/{d,c,b,a}; ls -f test1 test2- ไฟล์จะเรียงตามลำดับเดียวกัน ( a c b .. d .ในระบบของฉัน) แม้ว่าไฟล์จะถูกสร้างในสิ่งที่ตรงกันข้าม
1686

cp dir/* otherdir/ดูง่ายมาก แต่ใช้คำสั่งเดิม ฉันจะใช้การเรียงลำดับที่นั่นได้ไหม
ajo

2
@ajo: เชลล์ควรเรียงชื่อไฟล์ก่อนเรียกcpใช้ ลองecho dir/*ดูสิ่งที่พวกเขาขยายไป แต่อีกครั้งมันสำคัญเมื่อคัดลอกไปยังหน่วยความจำ FAT; มันจะไม่เปลี่ยนแปลงอะไรเมื่อคัดลอกไปยัง ext4
1686

1
สิ่งนี้จะดูตกลงสำหรับไดเรกทอรีเดียว? find SRC_DIR -iname '*mp3' -print0 | sort -z | xargs -0 -I {} cp {} DEST_DIR
ajo

2

หน้าตาเหมือนคนอื่น ๆ ที่คล้ายกันมีปัญหา

เครื่องมือที่ให้ผู้ใช้จัดเรียงไฟล์ตามความต้องการและจัดเรียงระบบไฟล์ FAT ในระดับต่ำ

เครื่องมือเดียวกันบน freecode.com

หวังว่ามันจะช่วย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.