Como reordenar fisicamente os arquivos '03 .mp3 01.mp3 02.mp3 '(' ls -f ') em um diretório?

10

A ordem física dos arquivos é importante quando eu os copio no meu pendrive e ouço no mp3 player do carro. A maioria das minhas pastas de álbuns de músicas é não classificada , por exemplo ls -f pode produzir:
03.song3.mp3
01.song1.mp3
02.song2.mp3

Quando copio essa pasta para o meu pendrive, os arquivos são copiados em essa ordem. Meu carro mp3 player exibe os arquivos na ordem não classificada, que não é o que eu quero. Subseqüentemente, posso reordenar os arquivos no dispositivo USB (consulte: Como para reordenar pastas? (como exibido em 'ls -U') ), mas poderia evitar isso se eu pudesse reordená-las dentro desse diretório delas no meu disco rígido (ext4)? Existe uma maneira de fazer isso?

(Caso contrário, pode haver uma maneira de escrever um comando find , que obtém os arquivos, os classifica e depois os copia em ordem ??) Alguma sugestão?

    
por ajo 01.01.2012 / 20:38

2 respostas

5

É improvável que você consiga fazer isso no ext4. Ao contrário do FAT (32), que usava uma tabela linear de arquivos em um diretório, os sistemas de arquivos modernos usam estruturas complexas como árvore B + (NTFS, XFS) ou B-tree com hash (ext3 / 4), onde todas as entradas são classificadas de acordo com um algoritmo específico.

Em particular, o ext3 / 4 classifica os arquivos de acordo com o valor hash do seu nome, assim você sempre obtém os mesmos arquivos na mesma ordem. É possível desativar o recurso dir_index via tune2fs , mas pode custar desempenho se você tiver diretórios contendo muitos arquivos.

Um comando muito básico para isso pode ser cp dir/* otherdir/ , onde o shell classifica os nomes ao expandir os argumentos, e cp simplesmente os copia na ordem dada.

Algo mais complexo para copiar subdiretórios:

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

find "$srcdir" \( -type d -printf "0dir %P
#!/usr/bin/env bash
srcdir=$1
destdir=$2

find "$srcdir" \( -type d -printf "0dir %P%pre%" \) \
            -o \( -type f -printf "1file %P%pre%" \) |
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 \( -type f -printf "1file %P%pre%" \) | 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
    
por 01.01.2012 / 20:59
2

Parece que os outros têm problemas semelhantes .

Ferramenta que permite aos usuários organizar os arquivos de acordo com seus desejos e classificar o estilo de baixo nível do sistema de arquivos FAT.

Mesma ferramenta em freecode.com

Espero que ajude.

    
por 20.03.2013 / 03:28

Tags