对文件系统上的文件进行排序

对文件系统上的文件进行排序

我的 MP3 播放器按照文件在文件系统上的放置顺序播放文件。现在 Nautilus 似乎以某种随机顺序复制文件,因此在收听有声读物或其他东西时,我得到的是随机顺序的所有章节,这在你骑自行车时就不太好,因为你无法将 MP3 播放器从口袋中拿出来找到正确的播放器。使用mc(Midnight Commander)时,大多数文件按字母顺序复制,这就是我想要的方式。

那么有吗...

  • 有什么方法可以告诉 Nautilus 按字母顺序复制文件和文件夹?
  • 一个可以在文件系统上直接按字母顺序对文件和文件夹进行排序的程序?

附加信息:

答案1

为了修饰 enzotib 的答案;这些播放器按照在文件分配表 (FAT,在 FAT 中) 中找到文件的顺序播放文件。

因此,FATSort 是解决该问题的一个潜在方法。上述警告有两个原因;

  • 该工具在裸机级别编辑文件分配表
    • 它在目录表的范围内移动文件条目,因此损坏的文件系统将比以前更加损坏
    • 只要文件系统通过fsck.vfat检查,就没问题。
  • 作者似乎觉得他没有投入足够的时间来确保代码的安全性
    • 你可能会创建一个(损坏的)文件分配表,导致 FATSort 应用程序中出现缓冲区溢出或类似问题
    • 事实上,这种情况不太可能发生——这只是一个小众应用,攻击者在你的 MP3 播放器上放置特制文件系统的机会有限,如果他有这样的机会,他会首先攻击一些更软的目标
    • 再次强调,如果你的文件系统通过了fsck.vfat(或者在 Windows 中通过了磁盘检查),那么就没问题了——这是作者的一份免责声明

palimpsest/ 磁盘实用程序有从 GUI 执行磁盘检查的选项。

对 FAT 进行排序的其他程序可以在这里看到:http://www.murraymoffatt.com/software-problem-0010.html

替代解决方案;

按播放顺序复制文件

最简单、最明显的方法是按照您希望播放的顺序将文件复制到播放器。Nautilus 以明显不确定的顺序将文件复制到播放器文件系统,原因大致相同 - 它倾向于按照 iNode 在磁盘上的排列顺序对文件进行操作。

如果您的曲目文件名以曲目编号开头,则这是理想的选择。大多数命令行工具都会按字典顺序对内容进行排序。正如您所注意到的,像 Midnight Commander 这样的工具也会这样做。

# Find the files in the source     | copy them to the target folder
# Note we use the          -print0 |       -0   args because media file names
# commonly contain spaces

find /path/to/music/folder -print0 | xargs -0 cp -t /path/to/target/folder

创建播放列表

有些播放器支持播放列表文件。我将脚本保存在我的 MP3 播放器文件系统中以支持生成这些播放列表。我的播放器是 iRiver 设备,它具有特定的二进制播放列表格式。如果您的播放器支持 .m3u 播放列表,则格式非常简单,仅包含文本文件中注释的元数据和路径。我曾经在 Rhythmbox 中制作播放列表并将其转换为 iRiver 格式;我还没有机会使用 Banshee 制作播放列表(我只是为了锻炼而制作它们,而且我的锻炼非常可预测......)

答案2

您所寻找的实用程序是存在的,并且脂肪分类

它在软件包中的 Ubuntu 存储库中可用fatsort

答案3

播放器可能会使用文件的修改时间。您可以使用类似下面的 Python 脚本来获取文件夹中的所有文件,然后touch更改它们的最后访问时间。没有播放器,我无法测试原因的结果。

import os
import sys
path = sys.argv[1]
thefiles = os.listdir(path)
thefiles.sort()
for fname in thefiles:
    os.utime(os.path.join(path, fname), None)

该脚本应在播放器文件夹上运行(将“path_to_the_player_folder”替换为实际路径),如下所示(如果您将其保存为 touch_all.py):python touch_all.py "path_to_the_player_folder"

我不知道如何告诉 nautilus 如何复制文件。不过其他人可能会回答这个问题的这一部分。

答案4

找出 MP3 播放器的设备名称:
lsblk
(就我而言/dev/sdb1

显示所有文件的当前顺序(不做任何更改):
sudo fatsort -l /dev/sdb1

按字母顺序对 MP3 播放器上的所有文件进行排序:
umount /dev/sdb1
sudo fatsort -a /dev/sdb1

如果fatsort投诉文件系统有缺陷 => 修复它:
sudo dosfsck -r -l -v /dev/sdb1

关于命令行参数的任何问题:
man fatsort
man dosfsck

相关内容