2013-06-25 76 views
1

我想在我的USB存储棒上重新排序文件。问题是MP3读取器会按照写入棒的顺序读取文件。 输出播放器读取命令的唯一方法是使用ls -f输出未排序的内容。在bash中按照排序顺序将文件写入磁盘

它不会帮助触摸每个文件来更新最后写入时间,我已经试过了。它仍然保持在相同的顺序,如果我输出ls -f

我已经想过“重写”FAT以纠正顺序,但我想也许社区知道一个更简单的方法。在bash中可能有一种方法可以实现这一点。

Output of ls -lf

+1

文件系统不这样做,一般情况下,保证他们将在其中创建它们的顺序返回文件。事实上,具有目录索引的文件系统通常不会这样做。 –

+0

使用FAT以外的东西? – Wug

+0

也许我的假设是错误的,但未分类的目录内容的输出与玩家读取的内容相同。我需要一种方法来改变这种未分类的状态。 – Steve

回答

4

最好的答案是最好的概括为“这是一个傻瓜差事;不要尝试”。文件系统通常不会保证返回结果的顺序,也不能保证此顺序与任何规范的磁盘顺序相匹配。 (结果可以从缓存返回;从无序索引;等)。

如果你坚持尝试...

dest=$1 
tmpdir=$(mktemp -d -t tempdir.XXXXXX) 
mv "$dest"/* "$tmpdir" # move files out of the location 
for f in "$tmpdir"/*; do # globs are implicitly sorted in LC_COLLATE order 
    mv "$f" "$dest/"  # ...so move them back in in that order. 
done 
+0

实际上,这将工作,我已经做了好几次了。廉价的MP3播放器支持高达4GB的FAT分区,就像OP描述的一样。 –

+0

我会立即尝试 - 马上回来 – Steve

+1

根据您使用的FAT实现,这可能甚至不起作用,除非您在清空它并重新放回东西之间重新创建文件系统。这取决于如何将释放的群集添加回免费群集链。根据完成的方式,您可能会发现添加回“空”(但不是新创建的)FAT文件系统的“第一个”文件不一定会位于磁盘的“前端”... – twalberg