复制到 USB 驱动器修改文件名

2 filenames fat usb-drive

我有一个 bash 脚本,可以将数据复制到 U 盘。有用。数据被很好地复制,但文件名总是改变。它们与以前相同,但任何更长的名称都被削减为只有 8 个字符长,并且扩展名只有 3 个字符长(总共 11 个字符)。

因此,驱动器上名为“willGetCutShorter.html”的原始文件变为“willGetS.htm”,而“small.txt”保持不变。复制的目录名称以相同的方式剪切,全部显示为 8 个字符长(当然,它们没有扩展名)。

我不希望这种情况发生。我希望根本不修改文件和目录名称。我也不知道为什么会这样。

在我的 bash 脚本中,我将计算机目录中的所有内容复制到驱动器中,并使用星号表示所有计算机目录内容。我想知道这是为什么吗?也许 cp 只是抓取文件名的一部分?

此外,虽然在 Linux 中,文件全部以小写形式出现,即使是最初部分大写的内容。然而,在 Windows 中,所有文件和文件夹都是大写的。

为什么?

编辑#1

在开始以这种方式使用它之前,我在 Windows 7 机器上格式化了 USB 驱动器。在我的/etc/fstab文件中,我为将其挂载为 msdos 的驱动器添加了一个条目。这是因为我阅读了手册页(可能是“man mount”),它说驱动器格式为 FAT32,已被 msdos 覆盖。

我想用 FAT32 作为文件系统类型来挂载它,但我在挂载手册页中看不到该选项。fstab 条目意味着 mount 命令仅包含以下内容:

sudo mount /mnt/
Run Code Online (Sandbox Code Playgroud)

bash脚本中的copy命令都是这样的:

cp -f -r /path/to/dir/* /mnt/to/dir/
Run Code Online (Sandbox Code Playgroud)

听起来我只需要将驱动器重新格式化为其他东西,或者以稍微不同的方式安装它?

Pra*_*odK 11

我怀疑您正在使用如下所示的挂载命令:

      mount -t msdos /dev/XYZ /mnt/test
Run Code Online (Sandbox Code Playgroud)

这将强制将分区安装在使用 8.3 文件名约定(参见https://en.wikipedia.org/wiki/8.3_filename)的旧版 DOS FAT 文件系统中,而不是使用长文件名(https://en. wikipedia.org/wiki/Long_filename)。

建议使用以下任一选项进行挂载:

      mount /dev/XYZ /mnt/test     (by default uses vfat, if it is FATXX formatted USB stick)
Run Code Online (Sandbox Code Playgroud)

或者

      mount -t vfat /dev/XYZ /mnt/test  (explicitly mount as vfat, if it is FATXX formatted USB stick)
Run Code Online (Sandbox Code Playgroud)

  • 你说的完全正确,谢谢。我的 /etc/fstab 文件包含一个将文件系统挂载为 msdos 类型的条目,因为我对文件系统的了解非常有限,我认为这是正确的。在安装的手册页中,没有 FAT32 选项,这是驱动器格式化的内容。看起来 vfat 覆盖了 FAT32,所以当我将类型更改为 vfat 时,它仍然可以完美安装,但是我的文件名更改问题得到了解决。非常感谢! (2认同)

ctr*_*lor 7

它可能是 USB 存储上的文件系统。FAT 文件系统只能支持 8+3 个字符的文件名。这个文件系统很旧。它仅用于与非常旧的系统向后兼容。

FAT 也只支持大写字符。由于这只是一种情况,因此可以选择将其映射为小写。这让事情变得更加方便。由于您不必输入大写字母,因此目录列表看起来也不会很吵。

考虑使用 FAT32、ntfs、ext4 等。