É 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