在bash中按排序顺序将文件写入磁盘

时间:2013-06-25 18:49:48

标签: bash filesystems

我想重新订购我的usb棒上的文件。问题是mp3阅读器将按照写入棒的确切顺序读取文件。 输出播放器读取顺序的唯一方法是使用 ls -f 输出未排序的内容。

触摸每个文件以更新上次写入时间没有帮助,我已经尝试过了。如果我用 ls -f

输出它,它仍然保持相同的顺序

我已经考虑过“重写”FAT以纠正订单,但我想社区可能更容易理解。可能在bash中有一种方法可以实现这一目标。

Output of ls -lf

1 个答案:

答案 0 :(得分: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