Bir dizindeki `03.mp3 01.mp3 02.mp3` (` ls -f`) dosyalarını fiziksel olarak nasıl yeniden sıralayabilirim?


11

Fiziksel düzen benim USB bellek üzerine onları kopyalamak ve araba mp3 çalar dinlerken dosyaların önemli. Müzik albümü klasörlerimin çoğu sıralanmamıştır , örneğin ls -f:
03.song3.mp3
01.song1.mp3
02.song2.mp3

Bu klasörü USB belleğime kopyaladığımda, dosyalar bu sırayla kopyalanır . Benim araba mp3 çalar dosyaları sıralanmamış düzende görüntüler, bu benim istediğim değil. Daha sonra USB çubuğundaki dosyaları yeniden sıralayabilirim (bkz: Klasörleri nasıl yeniden sıralayabilirim? (`` Ls -U``da gösterildiği gibi) ), ancak bunları sabit diskimde ( dizin 4 )? Bunu yapmanın bir yolu var mı?

(Başarısız olursa, findkomutları yazmanın , dosyaları alan, sıralayan ve sonra sırayla kopyalayan bir yol olabilir ??) Herhangi bir öneriniz var mı?


Alternatif olarak, dosyaları mp3 çalara kopyaladıktan sonra sıralayabilirsiniz : superuser.com/questions/368623/…
eswald 11:13

Yanıtlar:


5

Bunu ext4'te yapabilmeniz pek olası değildir. Bir dizinde doğrusal bir dosya tablosu kullanan FAT'den (32) farklı olarak, modern dosya sistemleri B + ağacı (NTFS, XFS) veya karma B ağacı (ext3 / 4) gibi karmaşık yapıları kullanır . belirli bir algoritma.

Özellikle, ext3 / 4 dosyaları adlarının karma değerine göre sıralar, böylece her zaman aynı dosyaları aynı sırada alırsınız. Dir_index özelliğini üzerinden devre dışı bırakmak mümkündür tune2fs, ancak çok sayıda dosya içeren dizinleriniz varsa performansınıza mal olabilir.


Bunun için çok temel bir komut cp dir/* otherdir/, kabuğun argümanları genişletirken adları sıraladığı ve cpbunları verilen sırayla kopyaladığı olabilir.

Alt dizinleri kopyalamak için daha karmaşık bir şey:

#!/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

O örneğin mümkün mü movebir söylemek dosyaları new_tmpklasörünü ve sonra geri taşıyarak ama sırasını dikte? (Klasörler için bir GUI içinden çalışıyor gibi görünüyor ?!)
ajo

1
@ajo: Dosya sisteminde dir_index etkinleştirilmişse çalışmaz. Dosyaları hangi sırada taşıdığınız / oluşturduğunuzdan bağımsız olarak, aynı ada sahip oldukları sürece aynı sıralama düzenine sahip olacaklardır. Örneğin, deneyin - tersine oluşturulmuş olsalar da mkdir test1 test2; touch test1/{a,b,c,d} test2/{d,c,b,a}; ls -f test1 test2dosyalar aynı sırada ( a c b .. d .sistemimde) sıralanacaktır .
user1686

cp dir/* otherdir/çok daha kolay görünüyor, ama orijinal düzeni kullanmaktadır. orada sıralama uygulayabilir miyim?
ajo

2
@ajo: Kabuğun , başlatmadan önce dosya adlarını sıralaması gerekiyor cp. echo dir/*Neye doğru genişlediklerini görmeye çalışın . Ama yine de, sadece FAT bellek çubuklarına kopyalanırken önemlidir; o olacak değil ext4 kopyalama yapılırken herhangi bir değişiklik.
user1686

1
bu tek bir dizin için uygun görünüyor mu? find SRC_DIR -iname '*mp3' -print0 | sort -z | xargs -0 -I {} cp {} DEST_DIR
ajo

2

Diğerlerinin benzer sorunları olduğu anlaşılıyor .

Aracı kullanıcıların isteklerine göre dosyaları düzenlemek sağlayan ve FAT dosya sistemi düşük seviyeli tarzını sıralar.

Freecode.com'da aynı araç

Umarım yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.