好吧,这是一个奇怪的问题——我的妻子刚买了一辆 2014 款 Nissan Altima。因此,我拿了她的 iTunes 资料库并将 .m4a 文件转换为 .mp3,因为汽车音响系统仅支持 .mp3 和 .wma。到目前为止一切顺利。然后,我将文件复制到 DOS FAT-32 格式的 USB 拇指驱动器,并将驱动器连接到汽车的 USB 端口,却发现所有曲目都乱序了。所有曲目都以两位数字前缀开头,即 01、02、03 等。因此你会认为它们是按顺序排列的。因此,我打电话给 Nissan Connect 支持,代表告诉我,已知文件读取顺序存在问题。他说文件读取的顺序与写入的顺序相同。因此,我手动复制了几张按预定顺序排列曲目的专辑,果然他是对的。
因此,我复制了大约 6 张专辑进行测试,然后切换到顶层目录并执行“find . >music.txt”。然后我将此文件传递给 rsync,如下所示:
rsync -av --files-from=music.txt . ../Marys\ Music\ Sequenced/
这些文件看起来是按顺序复制的,但是当我按修改时间的顺序列出文件时,它们与原始文件的顺序相同:
../Marys Music Sequenced/Air Supply/Air Supply Greatest Hits> ls -1rt
01 Lost In Love.mp3
04 Every Woman In The World.mp3
03 Chances.mp3
02 All Out Of Love.mp3
06 Here I Am (Just When I Thought I Was Over You).mp3
05 The One That You Love.mp3
08 I Want To Give It All.mp3
07 Sweet Dreams.mp3
11 Young Love.mp3
所以问题是,我如何复制名为 music.txt 的文件中列出的文件,并将它们复制到目标,并确保修改时间与文件列出的顺序相同?
答案1
您问了两个问题,一个问题明确提出,另一个问题仅含蓄提出:
如何复制名为 music.txt 的文件中列出的文件并将其复制到目标,并确保修改时间与文件列出的顺序相同?
如何才能让我的 MP3 播放器按字母顺序从 USB 记忆棒(使用 FAT 文件系统格式化)读取文件?
但恕我直言,第二个才是真正的。我认为,日产的家伙让你误入歧途了。(见XY问题)
闲话说得够多了……现在我试着回答这两个问题:
你的
rsync
方法几乎解决了第一个问题,仅有的您使用了-a
参数。rsync 的-a
相当于-rlptgoD
,其中特别包括-t
:人rsync (...)
这告诉 rsync 将修改时间与文件一起传输并在远程系统上更新它们。
绝对不是你想要的。当你复制到 FAT 文件系统(既不支持所有者、组、权限、链接等)时,我看不出提供的其他大多数选项有什么用处
-a
,所以尝试一下rsync -rv --files-from=music.txt . ../Marys\ Music\ Sequenced/
为了按字母顺序读取 MP3 文件,我建议使用另一种方法。我怀疑文件的读取顺序与写入顺序相同日产技术人员表示,按照文件分配表中列出的顺序。有一款巧妙的工具可以重新排列这个顺序,叫做胖排序。
首先,确保您的 USB 记忆棒不是挂载并找到相应的设备(例如使用
cat /proc/partitions
),假设它是/dev/sdi1
。然后运行 fatsort:fatsort -cn /dev/sdi1
这将对文件条目进行排序不区分大小写以及所谓的自然秩序,其中包括按字母顺序排列。1 )
它非常快,如果您只添加一个其他文件,则无需一遍又一遍地复制所有文件。
1)我现在无法测试该命令,但如果我没记错的话,-n
这就是你想要的。如果不是,请自行查阅帮助 ( fatsort -h
)。
答案2
可以用 xargs 来完成:
cat music.txt | xargs -I% rsync -av "./%" "../Marys\ Music\ Sequenced/%"
另一种方法是做这样的事情(假设一切都是连续的):
ls "../Marys\ Music\ Sequenced/" | xargs -I% touch "%"
答案3
你不能做这样的事吗?
copy files
for each file in music.txt
touch destination file
sleep 1