如何处理像“:”或“?”这样的字符 使无效的文件名?

nul*_*ull 7 filesystems thunar filenames fat32

我只是试图移动一个包含音乐文件的目录,thunar 4.10 它抱怨文件名无效。

原来,一个文件名(歌曲名称)包含一个问号。我怀疑这是一个问题,去掉问号,确实可以复制文件。添加“?” 回来是不可能的。我也在rename命令行上尝试过,但这也不起作用。(不确定 thunar 在幕后使用什么,所以这个测试可能没有实际意义)

现在,如果问号使文件名无效,那么首先如何创建该文件?我SoundJuicer从新获得的 CD创建了这些文件。我能够在各种播放器中播放文件(名称中带有“?”)。

这里发生了什么?我可以有“?” 以名义与否?为什么文件管理器无法处理此类文件,而其他应用程序似乎可以使用它?

更新: 下一首歌曲中有一个“:”。与“?”相同的问题。

这些不是 Unix 的无效字符;通常只有 NUL 字符和 / 字符是无效的文件名(/ 是目录分隔符)。

这也是我的直觉告诉我的,因为我在 Linux 中从未遇到过任何文件名问题,并且可以抛出几乎所有合理的东西并且它工作正常。这就是这里提出问题的动机。我以前从未遇到过无效的文件名。

您是否试图将文件移动到 U 盘?如果是这样,那根棒是格式化为 FAT32 还是原生 Linux 文件系统?

目标确实是我今天买的U盘。我打开gparted,它被格式化为FAT32。

我不太确定,但这是 Windows 的事情,对吗?Windows 有一堆它不支持的字符,显然包括?:。我对吗?

roa*_*ima 11

这些字符?:不在一个FAT32文件系统有效,所以如果这是你需要复制您需要重命名。

从命令行,您可以使用命令行工具rename(有时称为prename)来替换_甚至删除这些字符:

rename 's/[?<>\\:*|\"]/_/g'    # Change invalid characters to _
rename 's/[?<>\\:*|\"]//g'     # Remove invalid characters
Run Code Online (Sandbox Code Playgroud)

不熟悉thunar所以不知道有没有办法直接执行这个替换/替换操作。

我刚刚发现Linux copy to fat32 filesystem: invalid argument这建议将其添加到pax命令中(另一个复制文件的工具),以便您可以将完整文件名保留在本地磁盘上,但在复制到 USB 设备期间转换文件名:

pax -rw -s '/[?<>\\:*|\"]/_/gp' *.mp3 /media/usb_device
Run Code Online (Sandbox Code Playgroud)

如果完整的文件名对您来说真的很重要,我建议您重新格式化 U 盘以使用 Linux 原生文件系统,例如ext4. (如有必要,可以使用适用于extN文件系统系列的Windows 驱动程序。)