如何对目录中的文件“03.mp3 01.mp3 02.mp3”(“ls -f”)进行物理重新排序?

如何对目录中的文件“03.mp3 01.mp3 02.mp3”(“ls -f”)进行物理重新排序?

物理顺序当我将文件复制到我的 USB 记忆棒上并在车载 mp3 播放器中收听时,这些文件很重要。我的大多数音乐专辑文件夹都是未分类例如ls -f可能产生:
03.song3.mp3
01.song1.mp3
02.song2.mp3

当我将该文件夹复制到我的 USB 记忆棒上时,文件被复制到顺序。我的车载 mp3 播放器以未排序的顺序显示文件,这不是我想要的。我随后可以重新排序 USB 记忆棒上的文件(参见:如何重新排序文件夹?(如`ls -U`中显示)),但如果可以的话,我就可以完全避免这种情况在该目录中重新排序将它们放在我的硬盘 (ext4) 上?有办法吗?

(如果做不到这一点,也许可以写一个find命令,获取文件,对其进行排序,然后按顺序复制它们?有什么建议吗?

答案1

在 ext4 上你不太可能做到这一点。与使用目录中文件线性表的 FAT(32) 不同,现代文件系统使用复杂的结构,例如 B+tree(NTFS、XFS)或散列 B 树(ext3/4),其中所有条目都根据特定算法排序。

具体来说,ext3/4 根据文件名称的哈希值对文件进行排序,因此总是以相同的顺序获取相同的文件。可以禁用目录索引功能可以通过 来实现tune2fs,但是如果您的目录包含许多文件,则可能会影响性能。


一个非常基本的命令可能是cp dir/* otherdir/,其中 shell 在扩展参数时对名称进行排序,然后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

答案2

看起来其他人也有类似的问题

工具让用户按照自己的意愿排列文件,并对 FAT 文件系统低级样式进行排序。

相同的工具在 freecode.com

希望能帮助到你。

答案3

一些选择

相关内容