Wie ordne ich Dateien `03.mp3 01.mp3 02.mp3` (` ls -f`) in einem Verzeichnis physisch neu an?

11

Die physische Reihenfolge der Dateien ist wichtig, wenn ich sie auf meinen USB-Stick kopiere und im MP3-Player des Autos höre. Die meisten meiner Musikalbum-Ordner sind unsortiert , z. B. ls -fkönnen
Folgendes erzeugen: 03.song3.mp3
01.song1.mp3
02.song2.mp3

Wenn ich diesen Ordner auf meinen USB-Stick kopiere, werden die Dateien in dieser Reihenfolge kopiert . Mein Auto-MP3-Player zeigt die Dateien in der unsortierten Reihenfolge an, was ich nicht möchte. Ich kann die Dateien auf dem USB-Stick anschließend neu anordnen (siehe: So ordnen Sie Ordner neu an? (Wie in `ls -U` angezeigt) ), könnte dies aber insgesamt vermeiden, wenn ich sie in diesem Verzeichnis auf meiner Festplatte (ext4 ) neu anordnen könnte )? Gibt es eine Möglichkeit, das zu tun?

(Andernfalls kann es einen Weg geben, einen findBefehl zu schreiben , der die Dateien abruft, sortiert und dann in der richtigen Reihenfolge kopiert?) Irgendwelche Vorschläge?

ajo
quelle
Alternativ können Sie die Dateien sortieren nach ihnen auf den MP3 - Player zu kopieren: superuser.com/questions/368623/...
eswald

Antworten:

5

Es ist unwahrscheinlich, dass Sie dies auf ext4 tun können. Im Gegensatz zu FAT (32), bei dem eine lineare Tabelle von Dateien in einem Verzeichnis verwendet wurde, verwenden moderne Dateisysteme komplexe Strukturen wie B + -Baum (NTFS, XFS) oder Hash-B-Baum (ext3 / 4), nach denen alle Einträge sortiert sind einen bestimmten Algorithmus.

Insbesondere sortiert ext3 / 4 Dateien nach dem Hashwert ihres Namens, sodass Sie immer dieselben Dateien in derselben Reihenfolge erhalten. Es ist möglich, die dir_index- Funktion über zu deaktivieren, dies kann jedoch die Leistung beeinträchtigentune2fs , wenn Sie Verzeichnisse mit vielen Dateien haben.


Ein sehr grundlegender Befehl hierfür könnte sein cp dir/* otherdir/, dass die Shell beim Erweitern von Argumenten Namen sortiert und sie cpeinfach in der angegebenen Reihenfolge kopiert.

Etwas komplexeres zum Kopieren von Unterverzeichnissen:

#!/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
user1686
quelle
Ist es möglich, zB movedie Dateien zu einem new_tmpOrdner zu machen und sie dann zurück zu verschieben, aber die Reihenfolge zu bestimmen? (Scheint aus einer GUI für die Ordner zu arbeiten?!)
ajo
1
@ajo: Wenn im Dateisystem dir_index aktiviert ist, funktioniert es nicht. Unabhängig davon, in welcher Reihenfolge Sie Dateien verschieben / erstellen, haben sie dieselbe Sortierreihenfolge, solange sie denselben Namen haben. Versuchen Sie zum Beispiel, mkdir test1 test2; touch test1/{a,b,c,d} test2/{d,c,b,a}; ls -f test1 test2- die Dateien werden in derselben Reihenfolge ( a c b .. d .in meinem System) sortiert , obwohl sie in umgekehrter Reihenfolge erstellt wurden.
user1686
Das cp dir/* otherdir/sieht viel einfacher aus, verwendet aber die ursprüngliche Reihenfolge. könnte ich dort sortieren implementieren?
ajo
2
@ajo: Die Shell soll vor dem Start die Dateinamen sortieren cp. Versuchen Sie echo dir/*zu sehen, worauf sie sich ausdehnen. Aber auch hier ist es nur wichtig, wenn auf FAT-Speichersticks kopiert wird. es wird nicht alles ändern , wenn ext4 zu kopieren.
user1686
1
sieht das für ein einzelnes Verzeichnis in Ordnung aus? find SRC_DIR -iname '*mp3' -print0 | sort -z | xargs -0 -I {} cp {} DEST_DIR
ajo
2

Sieht so aus, als hätten andere ähnliche Probleme .

Tool , mit dem Benutzer Dateien nach ihren Wünschen anordnen und das Low-Level-Format des FAT-Dateisystems sortieren können.

Gleiches Tool auf freecode.com

Ich hoffe es hilft.

Benjamin
quelle